Loops For em Golang

GolangBeginner
Pratique Agora

Introdução

Diferente de outras linguagens, o Go possui apenas a palavra-chave "for" para declarações de loop. No entanto, ele é eficiente e flexível. Vamos aprender sobre o loop for no Go.

Pontos de Conhecimento:

  • Loop For
  • Loop For range

Caracteres em uma String

Na seção anterior sobre estruturas de dados básicas, aprendemos que uma string é uma coleção de caracteres. Portanto, podemos usar o índice para recuperar caracteres específicos em uma string. Vamos criar um arquivo string.go e escrever o seguinte código nele:

cd ~/project
touch string.go
package main

import "fmt"

func main() {
    s := "labex"

    // Access each character in the string using indices
    fmt.Println(s[0], s[1], s[2], s[3], s[4])
    // Print characters
    fmt.Printf("%c %c %c %c %c\n", s[0], s[1], s[2], s[3], s[4])
}

Execute o programa:

go run string.go

A saída será a seguinte:

108 97 98 101 120
l a b e x

Neste programa, declaramos uma variável do tipo string para armazenar "labex" e usamos o índice para acessar cada caractere da string. Ao imprimir, notamos que o programa exibe números em vez dos caracteres reais.

Ao comparar com a seguinte tabela ASCII, podemos ver que os números correspondem aos caracteres reais. Por exemplo, na tabela ASCII, "108" corresponde a "l".

Isso ocorre porque os caracteres, na verdade, armazenam a codificação numérica de cada caractere sob a codificação "UTF-8". O "UTF-8" é compatível com o "ASCII", portanto, a posição do caractere "l" armazena, na verdade, o código numérico "108".

Se quisermos exibir os caracteres, podemos usar a função fmt.Printf com a sequência de escape %c para formatá-los como caracteres. Isso é demonstrado na segunda linha do código. Ele converterá a codificação numérica em caracteres e então os exibirá.

Para acessar cada caractere da string no arquivo string.go, precisaríamos declarar um índice toda vez. Isso seria trabalhoso ao lidar com centenas ou milhares de dados. Nesse caso, podemos usar um loop for para realizar a operação.

Sintaxe do Loop For

Um loop executa um trecho de programa com base em uma condição. Vamos dar uma olhada na sintaxe da declaração do loop for:

for initialization; condition; post {
    // code block
}

A declaração de inicialização (initialization) inicializa uma variável. A condição (condition) deve retornar um valor booleano. A declaração posterior (post) modifica o valor da variável em cada iteração do loop. Vamos ver um exemplo específico.

Crie um arquivo for.go no diretório ~/project e escreva o seguinte conteúdo:

cd ~/project
touch for.go
package main

import "fmt"

func main() {
    // Output numbers from 0 to 9
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

Execute o programa:

go run for.go

A saída será a seguinte:

0
1
2
3
4
5
6
7
8
9

Neste programa, primeiro inicializamos uma variável temporária i com 0 e, em cada iteração do loop, o valor de i será incrementado em 1. A condição é que o loop continuará enquanto o valor de i for menor que 10, o que significa que o programa imprimirá os números de 0 a 9.

Nota: Em um loop for, as declarações de inicialização, condição e posterior são todas opcionais. Isso significa que, mesmo sem essas declarações, o loop for funcionará normalmente.

Se apenas a declaração de condição estiver presente, o loop for funciona de forma semelhante ao "while" em outras linguagens.

O código a seguir usa apenas a declaração de condição para obter o mesmo resultado do programa anterior:

package main

import "fmt"

func main() {
    i := 0
    for i < 10 {
        fmt.Println(i)
        i++
    }
}

Você pode notar que, quando apenas a declaração de condição está presente, o ponto e vírgula ; usado para separar as declarações pode ser omitido.

Usando o Loop For

Agora que entendemos a sintaxe do loop for, vamos reescrever o primeiro programa string.go usando um loop for.

package main

import "fmt"

func main() {
    s := "labex"
    for i := 0; i < len(s); i++ {
        fmt.Printf("%d %c\n", int(s[i]), s[i])
    }
}

Execute o programa:

go run string.go

A saída será a seguinte:

108 l
97 a
98 b
101 e
120 x

Desafio

Vamos fazer um pequeno desafio para consolidar nosso entendimento sobre o loop for.

Crie um arquivo for2.go. A tarefa é imprimir cada caractere da string "labex" em ordem inversa.

Saída Esperada:

x
e
b
a
l

Requisitos:

  • O arquivo for2.go deve ser colocado no diretório ~/project.
  • Use um loop for para alcançar o resultado.

Dica: O índice começa em 0.

✨ Verificar Solução e Praticar

A Palavra-Chave "break"

Na seção anterior, mencionamos que todas as três declarações em um loop for são opcionais. O que aconteceria se nenhuma delas fosse declarada? Vamos testar.

Escreva o seguinte código no arquivo for.go:

package main

import "fmt"

func main() {
    for {
        fmt.Printf("1")
    }
}

Execute o programa:

go run for.go

Podemos ver que, se a condição no loop for não for declarada, a condição será assumida como true e o loop continuará indefinidamente.

Dica: Use Ctrl+C para encerrar o programa.

Se quisermos sair do loop em uma condição específica sem declarar uma declaração de condição, ou se não pudermos escrever uma declaração de condição, podemos usar a palavra-chave "break". Ela força a saída imediata do loop que a contém.

Atualize o arquivo for.go com o código a seguir, que usa a palavra-chave "break" para imprimir 23 vezes o caractere "1":

package main

import "fmt"

func main() {
    i := 0
    for {
        // Increment the value of i by 1 in each loop iteration
        i++
        fmt.Printf("1")
        // Exit the loop when the value of i is 23
        if i == 23 {
            break
        }
    }
}

A palavra-chave "break" não serve apenas para loops for sem declaração de condição; ela também pode ser usada em loops for com condição. Quando a condição do "break" é atingida, ele ignora a verificação da condição do loop e encerra a execução.

A Palavra-Chave "continue"

Além da palavra-chave "break", que força a saída imediata do loop, existe também a palavra-chave "continue", que permite pular o restante da iteração atual do loop e iniciar a próxima iteração.

O uso da palavra-chave "continue" é semelhante ao do "break", mas suas funções são diferentes.

Vamos atualizar o arquivo for.go para pular os números 2 e 8:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 2 || i == 8 {
            continue
        }
        fmt.Println(i)
    }
}

Execute o programa:

go run for.go

A saída será a seguinte:

0
1
3
4
5
6
7
9

Neste programa, adicionamos uma declaração condicional dentro do bloco de código do loop for. Se o valor atual da variável do loop for 2 ou 8, o programa pulará o restante do código daquela iteração e iniciará a próxima volta do loop. Por isso, a saída não inclui os números 2 e 8.

Resumo

Neste laboratório, aprendemos sobre o loop for. Vamos revisar:

  • Todos os três parâmetros no loop for são opcionais.
  • A palavra-chave break pode ser usada para sair do loop atual.
  • A palavra-chave continue pode ser usada para pular a iteração atual e iniciar a próxima.