Swift a nova linguagem da Apple
Se você é desenvolvedor Apple já deve saber que uma nova linguagem de programação foi lançada no último WWDC 14, Swift é nome dela.
Até a versão do iOS 7 a linguagem utilizada oficialmente era o Objective-C que sempre foi um degrau mais alto na escalada pela proficiência, tanto para o desenvolvedor que vinha de outras linguagens quanto para os iniciantes no mundo de programação. A partir do iOS 8 as aplicações poderão ser desenvolvidas com Objective-C e Swift, inclusive com as duas no mesmo projeto.
A tendência é que o Swift atraia mais desenvolvedores por sua facilidade e semelhança com outras linguagens. Nesse artigo vamos focar nos conceitos iniciais dessa nova linguagem.
Definição de variáveis e constantes
Quando se aprende uma nova linguagem o primeiro passo normalmente a ser dado é a definição de uma variável. No Swift não será diferente, observe o exemplo:
var nome = "Fábio"
O primeiro detalhe de certa forma comum nas linguagens mais recentes é a ausência do ponto e vírgula, ele é opcional para a linguagem.
Perceba que não foi necessário a declaração do tipo String, isso porque o compilador infere o tipo após a atribuição. A declaração acima tem os mesmos efeitos práticos da seguinte:
var nome: String = "Fábio"
Dessa maneira o código abaixo nem compila, pois a linguagem possui uma tipagem estática.
var nome = "Fábio"
nome = 10 // Não compila pois nome é String, já que esse tipo foi inferido da linha anterior
A palavra var antes do nome indica que podemos mudar o nome para outra String, ou seja é uma variável e o código a seguir é válido:
var nome = "Fábio"
nome = "Zico"
Caso uma alteração não fosse permitida, deveríamos declarar uma constante usando let.
let nome = "Fábio"
nome = "Zico" // Não compila pois nome é constante
Trabalhando com classes
Por ser uma linguagem que segue o paradigma da Orientação de Objetos, saber a definir uma classe é imprescindível.
No Swift, diferentemente do Objective-C que usa um arquivo de definições(.h) e outro de implementações(.m), usa-se um único arquivo(.swift) para a definição de uma classe. Veja abaixo o exemplo: Veiculo.swift
class Veiculo{
var ano: Int
}
Com o código anterior, definimos um Veiculo que possui um atributo ano.
Mas da maneira como declaramos algumas informações ainda são necessárias para a classe compilar:
1)Declaração de construtor; 2)Inicialização de atributos;
Veiculo.swift
class Veiculo{
var ano: Int
var valor: Double = 20_000.0
//construtor
init(){
self.ano = 2014
}
}
Perceba que o atributo ano foi inciado no construtor e o atributor valor, novo atributo, foi inicializado fora. Sem problemas, podemos iniciar das duas formas. Essa exigência de iniciar o valor acontece pois não existe um valor default para os tipos. Outro ponto a ser notado é na declaração do valor que foi usado underscore para uma melhor legibilidade. Nada impede também de usar o literal como de costume: 20000.0;
Modificadores de acesso
Talvez você tenha percebido que estamos acessando direto o atributo, e essa falta de encapsulamento não é mais necessária com a chegada dos modificadores de acesso a partir do Xcode 6 beta 4.
Existem 3 modificadores por ordem de menos restritivo ao mais restritivo: public, internal e private. Sendo que o default é ser internal ao módulo/framework ou app/projeto.
class Veiculo{
private var ano: Int
private var valor: Double = 20_000.0
//construtor
init(){
self.ano = 2014
}
}
Instanciando Objetos
Definido os princípios básicos do use de classe no Swift, vemos a necessidade de instanciação dos objetos.
var fusca = Veiculo() //ou var fusca: Veiculo = Veiculo()
Ao contrário do que era feito no Objective-c, com duas chamadas de método(alloc e init), aqui usa-se apenas o nome do tipo e parênteses.
Definindo comportamentos
Uma classe também possui comportamentos e damos essas características através dos métodos que no Swift são declarados como funções(é possível ter funções sem uso de classes).
class Veiculo{
private var ano: Int
private var valor: Double = 20_000.0
//… construtor omitido
func calculaIPVA() -> Double{
return self.valor * 0.05
}
}
No exemplo anterior, foi definido um método cujo nome é calculaIPVA e retorna um Double além de não receber nenhum parâmetro. O seu uso se daria da seguinte forma:
var fusca = Veiculo()
var valorDoIpva = fusca.calculaIPVA()
Em métodos que possuem parâmetros teremos a sintaxe a seguir:
class Veiculo{
private var ano: Int
private var valor: Double = 20_000.0
//… construtor omitido
func calculaIPVA() -> Double{
return self.valor * 0.05
}
func calculaDepreciacaoParaAno(ano: Int, comTaxa taxaDeDepreciacao: Double)-> Double{
//lógica omitida
}
}
Perceba que no método calculaDepreciacaoParaAno temos dois parâmetros e no que se refere a taxa foi usado o conceito de External Parameter Name, para que fique mais descritivo. Não é obrigatório nomear o parâmetro como fizemos ao declarar o comTaxa, mas é um recomendação para uma melhoria da legibilidade, principalmente com métodos que recebem vários parâmetros. O uso desse método ficaria como a seguir:
var fusca = Veiculo()
var valorDoIpva = fusca.calculaIPVA()
fusca.calculaDepreciacaoParaAno(2020, comTaxa: 0.12)
Explorando o Swift
Para os testes anteriores é necessário ter o Xcode 6.
Utilize um projeto Playground, que como o próprio nome diz é o seu ambiente de diversão/exploração da linguagem e permite uma interatividade com aparência de linguagem de script, embora Swift seja compilado.
Swift e Objective-C
É importante saber que a comunicação entre Swift e Objective-C é bem transparente e de certa forma até intuitiva. De forma que pode-se usar uma aplicação com as duas linguagens nessa fase transitória. A comunicação não é o foco desse artigo, mas se ficou curioso sugiro que acesse essa documentação : Swift and Objective-C in the Same Project
Conclusão
Uma nova porta está aberta aos desenvolvedores que ainda não entraram no mundo iOS. Swift tem tudo para se tornar em um futuro próximo a linguagem dominante no mercado Apple. Para um aprofundamento nos estudos acesse a documentação oficial da linguagem: Swift Programming Language.