O ciclo for é uma das instruções mais usadas para executar repetidamente alguma lógica.
Em Go, é composto pela palavra-chave for, por um cabeçalho e por um bloco de código que contém o corpo do ciclo, delimitado por chavetas.
O cabeçalho é composto por 3 componentes separados por pontos e vírgulas (;): init, condition e post.
for init; condition; post {
// loop body - code that is executed repeatedly as long as the condition is true
}
Nota: Ao contrário de outras linguagens, não há parênteses () à volta dos três componentes do cabeçalho.
Na verdade, inserir esses parênteses é um erro de compilação.
No entanto, as chavetas { } à volta do corpo do ciclo são sempre obrigatórias.
O componente init costuma preparar uma variável contadora, o componente condition verifica se o ciclo deve continuar ou parar e o componente post costuma incrementar o contador no final de cada repetição.
for i := 1; i < 10; i++ {
fmt.Println(i)
}
Este ciclo imprime os números de 1 a 9 (incluindo o 9).
Definir o passo faz-se frequentemente com uma instrução de incremento ou de decremento, como mostra o exemplo acima.
És um ávido observador de aves que acompanha quantas aves visitaram o teu jardim. Normalmente fazes uma contagem num caderno para contar as aves, mas para trabalhares melhor com os teus dados, digitalizaste as contagens de aves das últimas semanas.
Vamos começar por analisar os dados com uma visão geral. Descobre quantas aves contaste no total desde que começaste os teus registos.
Implementa uma função TotalBirdCount que aceita uma slice de ints com a contagem de aves por dia.
Deve devolver o número total de aves que contaste.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34
Agora que já tens uma noção geral dos números das tuas contagens de aves, queres fazer uma análise mais detalhada.
Implementa uma função BirdsInWeek que aceita uma slice de contagens de aves por dia e um número de semana.
Devolve o número total de aves que contaste nessa semana específica. Podes assumir que as semanas são sempre registadas por completo.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12
Deste-te conta de que, durante todo o tempo em que tentavas acompanhar as aves, havia uma ave que estava escondida num canto distante do jardim.
Percebeste que essa ave passava sempre dia sim, dia não, no teu jardim.
Não sabes exatamente onde ela estava entre esses dias, mas de certeza que não estava no teu jardim.
A tua intuição de observador de aves também te diz que a ave estava no teu jardim no primeiro dia que registaste na tua lista.
Dada esta nova informação, escreve uma função FixBirdCountLog que recebe uma slice de aves contadas por dia como argumento e devolve a slice depois de corrigir o erro de contagem.
birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos166 exercícios, e mentoria humana real, tudo grátis.