El bucle for es una de las sentencias más usadas para ejecutar cierta lógica de forma repetida.
En Go consta de la palabra clave for, un encabezado y un bloque de código que contiene el cuerpo del bucle encerrado entre llaves.
El encabezado consta de 3 componentes separados por puntos y coma (;): init, condition y post.
for init; condition; post {
// loop body - code that is executed repeatedly as long as the condition is true
}
Nota: A diferencia de otros lenguajes, no hay paréntesis () que rodeen los tres componentes del encabezado.
De hecho, agregar esos paréntesis es un error de compilación.
Sin embargo, las llaves { } que rodean el cuerpo del bucle siempre son obligatorias.
for: un ejemploEl componente init por lo general prepara una variable contadora, el componente condition verifica si el bucle debe continuar o detenerse, y el componente post suele incrementar el contador al final de cada repetición.
for i := 1; i < 10; i++ {
fmt.Println(i)
}
Este bucle imprimirá los números del 1 al 9 (incluido el 9).
Por lo general, el paso se define con una sentencia de incremento o decremento, como se muestra en el ejemplo anterior.
Te apasiona observar aves y llevas un registro de cuántas han visitado tu jardín. Por lo general, usas marcas en un cuaderno para contar las aves, pero para trabajar mejor con tus datos, has digitalizado los conteos de aves de las últimas semanas.
Empecemos a analizar los datos con una vista general. Averigua cuántas aves has contado en total desde que empezaste tus registros.
Implementa una función TotalBirdCount que acepte un slice de int que contenga el conteo de aves por día.
Debe devolver el total de aves que contaste.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34
Ahora que ya tienes una idea general de tus números de conteo de aves, quieres hacer un análisis más detallado.
Implementa una función BirdsInWeek que acepte un slice de conteos de aves por día y un número de semana.
Devuelve el total de aves que contaste en esa semana específica. Puedes asumir que las semanas siempre se registran completas.
birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12
Te diste cuenta de que, todo el tiempo que estuviste intentando llevar la cuenta de las aves, había una que se escondía en un rincón lejano del jardín.
Descubriste que esta ave siempre pasaba un día sí y otro no en tu jardín.
No sabes exactamente dónde estaba entre esos días, pero definitivamente no en tu jardín.
Tu intuición de observador de aves también te dice que el ave estaba en tu jardín el primer día que registraste en tu lista.
Con esta nueva información, escribe una función FixBirdCountLog que tome un slice de aves contadas por día como argumento y devuelva el slice después de corregir el error de conteo.
birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
Regístrate en Exercism para aprender y dominar Go con 34 conceptos166 ejercicios y mentoría humana real, todo gratis.