Portuguese (Português) translation by David Batista (you can also view the original English article)
No primeiro artigo da série Swift from Scratch, você aprendeu sobre os playgrounds do Xcode e escreveu suas primeiras linhas em Swift. Neste artigo, vamos começar a aprender os fundamentos da linguagem de programação Swift explorando variáveis e tipagem. Também daremos uma olhada mais atenta às constantes e porque você é incentivado a usá-los tanto quanto possível.
Nas próximas partes desta série, nos vamos fazer uso dos playgrounds do Xcode para aprender os fundamentos da linguagem de programação Swift. Como vimos no artigo anterior, playgrounds são fundamentais para ensinar e aprender Swift.
Vamos começar criando um novo playground para este tutorial e eu encorajo você a ir mais longe. Usar a linguagem é uma ótima maneira de aprender sua sintaxe e entender seus conceitos.
Abra o Xcode 6+ e crie um novo playground selecionando New > Playground... no menu File do Xcode. Entre com um nome para o playground, selecione iOS em Platform e clique em Next. Informe ao Xcode onde você deseja salvar o seu playground e clique em Create.



Limpe o conteúdo do seu playground para que possamos começar do zero. Já fizemos uso de variáveis no tutorial anterior, mas agora vamos olhar mais de perto os detalhes essenciais para compreender melhor o que o Swift está fazendo nos bastidores.
1. Variáveis
Declarando variáveis
Em Swift, nos usamos a palavra-chave var
para declarar variáveis. Apesar de ser semelhante a forma como as variáveis são declaradas em outras linguagens de programação, aconselho fortemente a não pensar em outras linguagens de programação quando usamos a palavra-chave var
em Swift. Existem algumas diferenças importantes.
A palavra-chave var
é a única maneira de declarar uma variável em Swift. A mais comum e concisa forma de utilizar o var
é declarar uma variável e atribuir um valor a ela.
1 |
var street = "5th Avenue" |
Lembre-se que nós não terminamos esta linha de código com um ponto e vírgula. Apesar de o ponto e vírgula ser opcional em Swift, a melhor prática é não usar o ponto e vírgula se não for necessário.
Você também deve ter notado que não especificamos um tipo quando declaramos a variável street
. Isso nos leva a uma característica chave de Swift, inferência de tipo.
Inferência de tipo
Na instrução acima declaramos a variável street
e atribuímos o valor 5th Avenue
para ela. Se você é novo em Swift ou você já usou JavaScript ou PHP, você pode estar pensando que o Swift é sem tipagem ou uma linguagem fracamente tipada, mas isso está longe da verdade. Deixe-me relembrar que Swift é uma linguagem fortemente tipada. Segurança de tipo é um dos pilares da linguagem.
Nós estamos apenas começando e Swift já nos mostra um pouco de sua magia. Mesmo que a declaração acima não especifique explicitamente um tipo, a variável de street
é do tipo String
. Esta é a inferência de tipo do Swift em ação. O valor que atribuímos a street
é uma string. Swift é inteligente o suficiente para ver e implicitamente definir o tipo String
para a variável street
.
A instrução a seguir nos dá o mesmo resultado. A diferença é que nos explicitamente definimos o tipo da variável. A instrução abaixo literalmente informa que street
é do tipo String
1 |
var street: String = "5th Avenue" |
O Swift requer que você explicitamente ou implicitamente defina o tipo das variáveis ou constantes. Se você não fizer, o Swift irá informar que há um erro. Adicione a seguinte linha no seu playground, para você ver o que quero dizer.
1 |
var number |
Esta instrução seria perfeitamente valida em PHP ou em JavaScript. Em Swift, porém, ela não é valida. A razão é simples. Mesmo que declaramos uma variável usando a palavra-chave var
, não especificamos o tipo da variável. O Swift é incapaz de inferir o tipo se nós não atribuirmos um valor à variável. Se você clicar no erro, o Xcode irá te falar qual é a instrução errada.



Você pode facilmente corrigir este erro, fazendo uma das duas coisas. Nós podemos atribuir um valor para a variável como fizemos anteriormente ou podemos explicitamente atribuir um tipo para a variável number
. Definindo explicitamente o tipo para number
, e o erro desaparece. A linha de código abaixo define que number
é do tipo String
.
1 |
var number: String |
Mudando o tipo
Como você pode ver abaixo, atribuir novos valores para a street
e number
é simples e sem surpresas.
1 |
var street: String = "5th Avenue" |
2 |
var number: String |
3 |
|
4 |
street = "Main Street" |
5 |
number = "10" |
Não seria mais fácil atribuir o número 10
para a variável number
. Não há nenhuma necessidade de armazenar o número da rua como uma string. Vamos ver o que acontece se fizermos.
1 |
var street: String = "5th Avenue" |
2 |
var number: String |
3 |
|
4 |
street = "Main Street" |
5 |
number = 10 |
Se tentarmos atribuir um número inteiro a number
, o Xcode mostrará outro erro para nós. Infelizmente, desta vez a mensagem de erro não é muito útil. A razão pela qual o Xcode informa um erro é que tentamos atribuir um número inteiro para uma variável do tipo String
. Isto não é um problema em linguagens fracamente tipada, mas é em Swift.
O Swift é uma linguagem fortemente tipada em que cada variável tem um tipo específico e o tipo não pode ser alterado. Leia esta frase novamente, porque este é um conceito importante em Swift.
Para se livrar do erro, precisamos declarar a variável number
como Int
. Dê uma olhada no exemplo abaixo.
1 |
var street: String = "5th Avenue" |
2 |
var number: Int |
3 |
|
4 |
street = "Main Street" |
5 |
number = 10 |
Resumo
É importante que você mantenha o seguinte em mente. Você pode declarar uma variável com a palavra-chave var
mas não precisa declarar de formar explicita o tipo da variável. Porém, lembre-se que toda variável - e constante - deve ter um tipo em Swift. Se o Swift não pode inferir o tipo, então ele vai reclamar. Toda variável tem um tipo e este tipo não pode ser mudado.
2. Constantes
Constantes são similares as variáveis em termos de tipagem. A unica diferença é que o valor de uma constante não pode ser alterado uma vez que seja atribuído um valor a ela. O valor de uma constante é ... bem ... constante.
Declarando constantes
Para declarar uma constante, você usa a palavra-chave let
. Dê uma olhada no seguinte exemplo em que nós declaramos street
como uma constante em vez de uma variável.
1 |
let street: String = "5th Avenue" |
2 |
var number: Int |
3 |
|
4 |
street = "Main Street" |
5 |
number = 10 |
Se alterarmos apenas a primeira linha, substituindo var
por let
, o Xcode retornar um erro por razões obvias. Tentar mudar o valor de uma constante não é permitido em Swift. Remova ou comente a linha em que nos tentamos atribuir um novo valor para street
para se livrar do erro.
Usando constantes
Eu espero que você concorde que declarar constantes é muito fácil em Swift. Não é necessário nenhuma palavra-chave exótica ou uma sintaxe complexa. Declarar constantes é tão fácil quanto declarar variáveis e isto não é uma coincidência.
O uso de constantes é encorajado em Swift. Se um valor não vai mudar ou você não espera que mude, então deve ser uma constante. Isto tem uma série de benefícios. Um dos benefícios é a performance, mas o mais importante benefício é a segurança. Ao usar constantes sempre que possível, você adiciona restrições em seu código e o resultado é um código seguro.
3. Tipos de dados
A maioria das linguagens de programação têm uma ampla gama de tipos para armazenar strings, inteiros, floats, etc. Os tipos disponíveis em Swift são limitados. Dê uma olhada na lista a seguir.
Int
Float
Double
String
Character
Bool
É importante entender que os tipos acima não são tipos básicos ou primitivos. Eles são chamados de tipos, que são implementados por Swift usando estruturas. Iremos explorar estruturas com mais detalhes posteriormente nesta série, mas é bom saber que o que vimos até agora não são como os tipos primitivos, que você pode ter usado em, por exemplo, Objective-C.
Existem muitos outros tipos de dados em Swift, tais como tuplas, arrays e dicionários, e vamos explora-los um pouco mais tarde nesta série.
4. Conversão de tipo
Há mais um tema que precisamos discutir, conversão de tipo. Dê uma olhada no seguinte trecho de Objective-C. Este bloco de código imprimirá o valor 314.000000
no console.
1 |
int a = 100; |
2 |
float b = 3.14; |
3 |
|
4 |
NSLog(@"%f", (a * b)); |
O Objective-C converte implicitamente em tempo de execução a variável a
para um valor em ponto flutuante e multiplica com b
. Vamos reescrever o trecho de código acima usando Swift.
1 |
var a = 100 |
2 |
var b = 3.14 |
3 |
|
4 |
println(a * b) |
Ignore a função println
por enquanto. Primeiro quero focar a multiplicação de a
e b
. O Swift inferirá o tipo de a
, um Int
e b
, um Double
. No entanto, quando ele tenta multiplicar a
e b
, ele percebe que não são do mesmo tipo. Isto pode não parecer um problema para você, mas é para o Swift. O Swift não sabe qual tipo deve ser o resultado desta multiplicação. Deve ser um número inteiro ou um double.
Para corrigir esse problema, precisamos ter certeza de que ambos os operandos da multiplicação são do mesmo tipo, porque o Swift não converte implicitamente os operandos para nós. Há uma série de funções auxiliares globalmente disponíveis que faz esta tarefa trivial. No exemplo atualizado abaixo, chamamos Double
sobre a variável de a
para converter seu valor para double. Isto resolve o erro.
1 |
var a = 100 |
2 |
var b = 3.14 |
3 |
|
4 |
println(Double(a) * b) |
Observe que o tipo de a
não mudou. Mesmo que o trecho de código acima possa parecer do tipo casting, não é a mesma coisa. A função Double
pega o valor de a
, retorna o valor como um Double
e o resultado é usado na multiplicação com b
. O resultado é do tipo Double
.
O que você precisa se lembrar é que Swift é diferente de C e Objective-C. Ela não converte implicitamente os valores das variáveis e constantes. Este é outro conceito importante a entender.
5. Linha de impressão
No trecho de código anterior, nós invocarmos nossa primeira função, println
. A função println
é muito similar a NSLog
do Objective-C, ela imprime algo e acrescenta uma nova linha. A biblioteca padrão da Swift também inclui uma função de print
, que faz a mesma coisa que a função println
, mas não acrescentar uma nova linha.
Para imprimir alguma coisa, basta invocar println
e passar um parâmetro. Que pode ser uma variável, uma constante, uma expressão ou uma literal. Dê uma olhada nos exemplos a seguir.
1 |
var string = "this is a string" |
2 |
let constant = 3.14 |
3 |
|
4 |
println(string) |
5 |
println(constant) |
6 |
println(10 * 50) |
7 |
println("string literal") |
Também é possível usar interpolação de string para combinar variáveis, constantes, expressões e literais. Interpolação de strings é muito fácil em Swift, basta inserir as variáveis, constantes, expressões ou literais em \()
. Fácil como uma torta.
1 |
let street = "5th Avenue" |
2 |
let number = 10 |
3 |
|
4 |
println("She lives at \(street) \(number).") |
Aprenda mais em nosso Curso de Programação em Swift
Se você está interessado em elevar seu aprendizado em Swift para o próximo nível, você pode dar uma olhada no nosso curso completo de desenvolvimento em Swift.
Esta aula de exemplo entra um pouco mais detalhadamente sobre as variáveis e constantes e como alocar memória para armazenar diferentes tipos de dados.
Conclusão
É fundamental que você entenda como Swift lida com variáveis e constantes. Apesar de poder levar algum tempo para se habituar ao conceito de constantes, uma vez que você aceitou essa recomendação, seu código será muito mais seguro e mais fácil de entender. No próximo tutorial desta série, nós continuamos nossa exploração do Swift olhando para coleções.
Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!