Quaddro + MacMagazine: Swift na prática #5 — Controle de Fluxo (looping)

por Leandro Cissoto

Mais uma semana, mais um artigo sobre Swift na parceria Quaddro + MacMagazine! Espero que vocês estejam se divertindo ao brincar no Playground tanto quanto a gente. 😉

Hoje vamos falar sobre Controle de Fluxo, os famosos loops e vamos ver como utilizá-los para deixar nossas aplicações mais dinâmicas. E para manter o padrão, teremos mais um exercício guiado e um desafio.

Lembrando que, para testar os conceitos aqui apresentados, recomendamos o uso do Xcode 6 ou superior. Se você não possui um Mac ou não quer instalar o Xcode, é possível utilizar uma ferramenta online que permite escrever em Swift diretamente pelo navegador.


Ícone do app Xcode

Xcode

de Apple

Compatível com Macs
Versão 11.1 (7.6 GB)
Requer o macOS 10.14.4 ou superior

Grátis

Badge - Baixar na Mac App Store

Código QR Código QR

Teoria

Podemos dizer que uma estrutura de controle de fluxo é responsável por repetir um determinado bloco de código até que uma condição específica seja verdadeira. Isso pode parecer confuso a princípio, mas conforme formos avançando, vocês verão que é bem mais tranquilo na prática.

A maioria das linguagens de programação possui várias estruturas de controle de fluxo, que também são conhecidas como loop, looping, laço de repetição ou estrutura de repetição. Na Swift não seria diferente. Vamos conhecer então as principais estruturas de controle de fluxo.

for-in

A estrutura de repetição for-in é utilizada — e muito — quando precisamos percorrer uma determinada coleção, itens dentro de uma sequência, intervalo ou progressão.

EXEMPLO 1. Fazendo uma progressão de 1 a 10 utilizando um range:

for numero in 1...10{
    println(numero)
}

EXEMPLO 2. Percorrendo um array

let semestre = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho"]

for mes in semestre{
    println("Estamos no mês \(mes)")
    
}

Podemos também resgatar o índice e o valor de um array utilizando a função global enumerate, que retorna uma tupla (lembram dela?) contendo essas informações.

EXEMPLO 3. Percorrendo um array e resgatando seu índice:

for (indice, mes) in enumerate(semestre){
    println(" Na posição \(indice) o mês \(mes)")
}

for

Utilizamos o laço for quando desejamos que um determinado bloco de código seja percorrido repetidas vezes até que uma condição declarada na criação do laço seja atendida.

Exemplo:

for var x = 1; x <= 10; x++ {
    println(x)
}

Para criarmos um for, precisamos entender seus três principais componentes:

  • var x = 1; na primeira parte do for, declaramos a variável que será usada para atender a condição.
  • x <= 10; na segunda, definimos a condição a ser atendida, criando o limite do loop.
  • x++; na terceira, definimos uma operação que definirá como a condição será atendida.

Nota: é preciso estar atento à lógica da estrutura de repetição. Caso ela não seja atendida, geraremos o famoso "loop infinito", o que causará um crash na aplicação.

while

O while é responsável por executar um bloco de instruções enquanto a sua condição for verdadeira. A diferença é que fazemos as operações dentro do bloco para atendermos à condição da declaração.

Exemplo:

var y = 1

while y <= 10 {
    println("Rodei \(y) vezes")
    y++
}

do while

O do while tem um comportamento semelhante ao do while. Sua diferença é que ele executará primeiro o trecho de código, para somente depois verificar a condição — ao contrário do while, que primeiro verifica a condição para executar o código.

Exemplo:

var z = 10
do{
    println("Executei uma vez e sai")
}while(z < 10)

Perceba que o bloco de código rodou ao menos uma vez, mesmo com a condição definida pelo while sendo atendida sem a necessidade de nenhuma operação.

Exercício guiado

Agora que já vimos as principais estruturas de controle de fluxo, vamos para o exercício guiado, onde iremos utilizá-las de maneira prática.

  1. Crie um novo Playground com o nome de "Controle de Fluxo - Loop".

Swift - Controle de Fluxo - Loop

  1. Vamos criar um array que irá receber os dias da semana. Começaremos percorrendo os dias da semana:
//Declaramos os dias da semana
let diasSemana = ["Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"]

//Percorremos os dias da semana
for dia in diasSemana{
    println("Hoje é \(dia)")
    
}

Swift - Controle de Fluxo - Loop

  1. Vamos enviar mensagens personalizadas de acordo com o dia da semana. Para isso, usaremos a condicional switch dentro da estrutura de repetição.
//Declaramos os dias da semana
let diasSemana = ["Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"]

//Percorremos os dias da semana
for dia in diasSemana{
    
    println("Hoje é \(dia)")
    
    switch dia {
    case "Seg": println("É difícil de acordar.")
    case "Ter": println("Começo oficial da semana.")
    case "Qua": println("Meio da semana do mal")
    case "Qui": println("Tá chegando o fds")
    case "Sex": println("Chegou a sexta! Vamos sair?")
    case "Sab": println("Ressaca :(")
    case "Dom": println("Gols do fantástico. Acabou :(")
    default:
        println("Que planeta você vive?")
    }
    
}

Swift - Controle de Fluxo - Loop

  1. Vamos usar agora o laço de repetição for combinado com algumas operações matemáticas para verificarmos se o número é par ou ímpar. Fazemos isso usando o resto da divisão (operador %).
//Percorremos de 1 a 10 no loop
for var num = 1; num <= 10; num++ {
    
    //Verificamos se o número é par ou impar
    if num % 2 == 0{
        println("O numero \(num) é par")
    }else{
        println("O numero \(num) é impar")
    }

}

Swift - Controle de Fluxo - Loop

  1. Vamos utilizar o laço de repetição for para percorrermos um array. Claro que utilizar o for in é muito mais fácil, mas é interessante sabermos que é possível fazê-lo apenas com for.
//Também podemos percorrer um array com o for
let carros = ["La Ferrari", "BMW M3", "Mustang", "McLaren P1"]

for var index = 0; index < carros.count; index++ {
    println("Conheça meu carro. \(carros[index])")
}

Swift - Controle de Fluxo - Loop

  1. Vamos usar o laço while para fazermos uma tabela de multiplicação pelo mesmo valor por 2.
var n = 2

while n < 1000 {
    n = n * 2
    println("N vale \(n)")
}

Swift - Controle de Fluxo - Loop

  1. Podemos utilizar o while para fazermos a verificação se um número é par ou ímpar, assim como fizemos com o laço for.
var xwhile = 1

while xwhile <= 10 {

    if xwhile % 2 == 0{
        println("O número \(xwhile) é par!")
    }else{
        println("O número \(xwhile) é par!")
    }
    
    xwhile++
}

Swift - Controle de Fluxo - Loop

  1. Vamos usar o do while para fazermos uma simulação de aceleração. Lembrando que o do while roda ao menos uma vez antes de verificar a condição.
var velocidade = 10

do{
    
    if velocidade == 10 {
        println("Velocidade inicial garantida em \(velocidade)")
    }

    println( "Minha velocidade é \(velocidade)")
    velocidade = velocidade + 10

}while velocidade < 100

Swift - Controle de Fluxo - Loop

Desafio

Só para não perder o costume, vamos fazer um desafio para vocês mostrarem que já estão feras em Swift e em controle de fluxo.

Desafio tabuada

Fazer uma tabuada do 1 a 10 utilizando for in com range, com no máximo 7 linhas de código.

Desafio simples, sem muitas regras, mas que vai exigir um pouquinho de lógica. ;-)

·   ·   ·

Lembramos que todos os desafios podem ser enviados para mm@quaddro.com.br. Os emails serão respondidos o mais rápido possível. A solução do desafio você também encontrará no nosso GitHub.


Na próxima matéria, vamos falar de funções e como podemos utilizá-las para facilitar ainda mais nossa vida na Swift. Até a semana que vem! ;-)

Posts relacionados

Comentários