Back
Close

Swift - Variáveis, Tipos, Tuplas, Enumerações e Operadores

oieteus
711 views

Constantes e Variáveis

Constantes e variáveis associam um identificador como myName ou currentTemperature com o valor de um particular tipo, onde o identificador pode ser usado para recuperar o valor. A diferença entre constante e variáveis é que a variável pode ser atualizada/modificada mesmo depois de ter recebido um valor inicial. As contantes depois de definidas com um valor inicial não podem ser mais alteradas.

Pesquise por conta própria e documente as respostas

  • Que tipo de implicações negativas as variáveis podem trazer para nossa aplicação?
  • Quais regras devemos respeitar para criar indicadores válidos em Swift?
  • Você criou uma constante com o seu nome. Na linha seguinte você tenta atualizar esta constante. O que irá acontecer?
  • Swift é uma linguagem de tipo seguro. O que isso significa?
  • Swift é uma linguagem que possibilita a inferência de tipo. O que isso significa?

Sugestão

Utilize o espaço abaixo para declarar constantes e variáveis para que você possa se familiarizar com o estilo do Swift.

Tipos numéricos

Swift contém alguns tipos numéricos, para que possamos utilizar números inteiros e pontos flutuantes em nossas aplicações. Tipos numéricos existentes em Swift: Int, Double, Float.

Uma coisa muito legal é que Swift ignora underlines e interpreta o valor como se os underlines não existissem, isso pode contribuir para a criação de constantes mais legíveis.

Pesquise por conta própria e documente as respostas

  • Swift tem vários subtipos do tipo Int. Quais são eles e quais são suas diferenças?
  • Qual a diferença entre os tipos Float e Double?

isMultiple(of:)

O tipo Int em Swift tem um método chamado isMultiple(of:), que pode ser muito usado. Este método permite você verificar se um número é múltiplo de outro. Sem este método poderíamos fazer algo como o seguinte código:

Agora vamos usar o método isMultiple(of:), teremos algo como:

Com este método não signifca eliminaremos muito código, mas o uso dele fará nosso código muito mais legível e fácil de entender.

Tentando somar tipos diferentes

Suponha que você tem duas variáveis, onde uma é do tipo Int e a outra é do tipo Double. Se você realizar uma operação de soma entre elas o que irá acontecer?

Se você tentar executar este código, provavelmente receberá o seguinte erro: operator + cannot be applied to operands of type Int and Double. Este erro acontece porque estamos tentando adicionar dois números que possuem tipos númericos diferentes, e isto não é permitido. Para adicionar um número Int com um número Double, nós precisamos converter o tipo Int para Double. O código abaixo mostra como podemos fazer isso:

O tipo Boleano

Valores boleanos são frequentemente usados como resultado de uma operação lógica que pode resultar em verdadeiro ou falso. Swift tem o tipo Bool variáveis ou constantes do tipo Bool podem assumir dois valores true ou false.

Constantes e variáveis booleanas podem ser definidas da seguinte forma:

Valores booleanos são mais usados especialmente quando estamos trabalhando com declararações condicionais, como: if, while e guard. Por exemplo, o que o código abaixo irá fazer?

Se você tiver respondido que este código irá exibir no console (vulgo printar), Irado, não quero esperar para aprender isso, então você está correto. Esta linha é exibida no console porque a constante swiftIsCool tem o valor true, enquanto a variável itIsRaining tem o valor false, por isso o texto: Pegue uma capa de chuva não é exibido no console.

toggle()

Na maioria das linguagens quando você quer alternar o valor de uma variável do tipo booleano, você faz algo como:

Ao executar este bloco de código perceberá que o valor final da variável itIsRaining será true, isso acontece porque o operador ! representa negação.

Em Swift as variáveis/constantes do tipo Bool possuem um método chamado toggle() que é utilizado para alternar/inverter o valor da variável.

Assim como o método isMultiple(of:) presente em variáveis do tipo Int, o método toggle() tem o objetivo de deixar seu código mais legível e fácil de entender.

O tipo String

String é uma coleção ordenada de caracteres. Textos como Hello, World! e Swift seriam representados em nossa aplicação por variáveis ou constantes do tipo String.

Abaixo um código bem familiar, ele mostra como definir duas variáveis do tipo String:

Também podemos criar uma string usando um literal de string de várias linhas. O código a seguir mostra como podemos fazer isso:

Desde que uma String é uma coleção ordendada de caracteres, nós podemos iterar e percorrer caractere por caractere de uma String. O código abaixo mostra como fazer isso:

Outra opção para percorrer todos os caracteres de uma String é utilizando map():

Não se assuste com o map() caso ainda não o conheça iremos conhecê-lo com mais profundidade nos próximos capítulos.

Concatenação de Strings

Para concatenar Strings podemos utilizar dois operadores + ou +=.

Interpolação de Strings

Para efetuar uma interpolação de Strings podemos usar o operador \().

Mutabilidade

Em Swift, nós definimos a mutabilidade de variáveis e coleções usando as palavras chaves let e var.

Se nós definirmos uma variável String usando var ela é mutável, isto significa que nós podemos editar e mudar o seu valor. Se nós definirmos uma constante String usando let ela é imutável, isto significa que não podemos mudar o seu valor uma vez que ela é configurada. O código abaixo mostra a diferença entre Strings mutáveis e imutáveis:

Pesquise por conta própria e documente as respostas

  • Qual método podemos utilizar para deixar todos os caracteres de uma String maíusculos? E minúsculos?

Comparando Strings

Swift provê quatro caminhos para comparar Strings, são eles:

  • Igualdade
  • Igualdade no prefixo
  • Igualdade no sufixo
  • E a validação se uma String é vazia

Pesquise por conta própria e documente as respostas

  • Execute o código acima, entenda como cada forma de comparação funciona e documente.
  • Swift é case sensitive? E o que isso significa?

Tuplas

Tupla é um grupo de múltiplos valores dentro de um único tipo. Estes valores não necessariamente precisam ser do mesmo tipo. O seguinte exemplo mostra como definir uma tupla:

No exemplo anterior criamos uma tupla que contém duas strings, dois inteiros, e um double. Os valores de uma tupla podem ser decompostos em um conjunto de variáveis.

Os valores de uma tupla podem também ser recuperados por uma localização específica do valor. O exemplo mostra como nós podemos recuperar os valores por sua localização.

Com tuplas nomeadas você evita o passo da decomposição. Uma tupla nomeada associa um nome(chave) com cada elemento da tupla. O código abaixo mostra como criar uma tupla nomeada.

Valores de uma tupla nomeada podem ser acessadas usando a sintaxe do .. Nós podemos acessar o elemento da tupla da seguinte forma: team.city. No código anterior o elemento team.city irá conter a string Boston.

Enumerações

Enums são um recurso extraordinariamente poderoso do Swift, e você os verá sendo usados ​​de muitas maneiras e lugares.

Na sua forma mais simples, um enum é simplesmente um bom nome para um valor. Podemos fazer um enum chamado Direction com casos para north, south, east, e west, e fazer referência a eles em nosso código. Claro, poderíamos ter usado um número inteiro em vez disso, nesse caso nos referiríamos a 1, 2, 3 e 4, mas você realmente se lembra do que 3 significa? E se você digitou 5 por engano?

Então, enums são uma maneira de dizermos Direction.north algo específico e seguro. Se tivéssemos escrito Direction.thatWaye não existisse tal caso, o Swift simplesmente se recusaria a construir nosso código. Nos bastidores, o Swift pode armazenar seus valores de enumeração de maneira muito simples, então eles são muito mais rápidos de criar e armazenar do que algo como uma string.

À medida que você progride, você aprenderá como o Swift nos permite adicionar mais funcionalidades às enumerações – elas são mais poderosas no Swift do que em qualquer outra linguagem que eu já tenha visto.

Vamos definir agora uma enumeração que contém uma lista de planetas:

Uma vez que o tipo da variável é inferido, nós podemos então atribuir um novo valor sem utilizar o prefixo Planets.

Nós podemos comparar os valores de um enum usando o tradicional operador de igualdade == ou usando switch.

Nota: Ainda não vimos como funciona o switch, mas não se preocupe que veremos ele em detalhe mais a frente. Por agora só queremos ilustrar o seu uso com uma enumeração.

O seguinte exemplo mostra como usar o operador de igualdade e o switch em um enum:

Enumerações podem ser preenchidas com valores brutos (raw value). O seguinte exemplo mostra como definir uma enumeração com valores do tipo String.

Em Swift, enumerações podem ter também valores associados, eles permitem armazenar informações adicionais junto com os casos do enum, estes valores podem ser de qualquer tipo e os tipos também podem ser diferentes para cada membro. Vamos ver como nós podemos usar valores associados definindo uma enumeração chamada Product.

O caso .book possui três valores associados, são eles dos tipos: Double, Int e Int. Enquanto o caso .puzzle possui dois valores associados dos tipos Double e Int. Nós podemos extrair os valores associados como uma constante usando a palavra chave let, mas nós podemos extrair valore associados como variáveis também com a palavra chave var.

Operadores

Um operador é um símbolo ou combinação de símbolos que podemos usar para verificar, alterar ou combinar valores. Usamos operadores na maioria dos exemplos até agora, mas não os chamamos especificamente de operadores. Nesta seção, mostraremos como usar a maioria dos operadores básicos que Swift suporta.

Operador de atribuição

O operador de atribuição = inicializa uma variável ou uma constante. E também é utilizado para atualizar os valores de uma variável.

Operadores de comparação

Operadores de comparação retornam um valor booleano true se a afirmação for verdadeira ou false se a firmação não for verdadeira.

  • Igualdade: varA == varB
  • Não igual: varA != varB
  • Maior que: varA > varB
  • Maior que: varA < varB
  • Maior ou igual: varA >= varB
  • Menor ou igual: varA <= varB

Abaixo alguns exemplos:

Operadores aritméticos

Os operadores aritméticos performam as quatro operações básicas da matemática.

  • Adição: varA + varB
  • Subtração: varA - varB
  • Multiplicação: varA * varB
  • Divisão: varA / varB

Abaixo alguns exemplos:

Operador de resto

O operador de resto %, calcula o resto da divisão do primeiro operando dividido pelo segundo. Em outras linguagens, isso às vezes é chamado de módulo ou operador de módulo.

Abaixo segue um exemplo:

Operadores de atribuição composta

Os operadores de atribuição compostos: +=, -=, *= e \= combinam um operador aritmético com um operador de atribuição.

Operador de intervalo fechado

O operador de intervalo fechado, ..., define um intervalo que vai do primeiro ao segundo número. Os números são separados por três pontos.

Abaixo segue um exemplo, notem que no exemplo estamos usando for, mas fiquem tranquilos se ainda não conhecerem esta estrutura de repetição, pois vamos cobrir este tipo de estrutura de repetição no playground referente a controle de fluxo.

Execute o código abaixo e analise a saída do mesmo.

Operador de intervalo semi-aberto

O operador de intervalo semi-aberto, ..<, define um intervalo que vai do primeiro número até o segundo número menos um. Os números são separados por dois pontos e o sinal de menor que.

Execute o código abaixo e compare a saída obtida aqui com a saída do playground anterior.

Operador ternário

O operador condicional ternário atribui um valor a uma variável com base na avaliação de um operador de comparação ou valor booleano.

Segue o protótipo e abaixo um código mostrando o uso do operador ternário:

boolValue ? valueA : valueB

Operador lógico NOT

O operador lógico NOT, mais conhecido como ! inverte o valor de um booleano.

Operador lógico AND

O operador lógico AND, mais conhecido como &&, retorna true se ambos os operandos forem true; caso contrário, ele retorna false.

Operador lógico OR

O operador lógico OR, mais conhecido como || retorna true se um dos operandos for true.

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants