Existen situaciones en las que necesitamos que una acción se repita un número determinado de veces. Para ello se utilizan las estructuras de iteración o bucles. En Kotlin podemos encontrar cuatro tipos de bucles:
BUCLE FOR
El bucle for se utiliza para iterar sobre una colección de elementos y ejecutar un bloque de código con cada iteración:
for (i in1..5) {println("Es la iteración número $i")}// Tambien puede ser una sentenciafor (i in1..5) println("Es la iteración número $i")
Los bucles for son especialmente útiles para recorrer los elementos de una colección, vease una lista o un mapa.
Como hemos visto en el ejemplo del bucle for, existen diferentes formas de iterar sobre un intervalo en Kotlin, una de ellas es 1..5 aunque existen varias que se deben utilizar de forma idiomática (por convenio) en función de nuestras necesidades:
Recorrer un Array
Para recorrer los elementos de un Array (o una Lista) podemos utilizar el bucle for de las siguientes maneras:
BUCLE WHILE
El bucle while permite repetir un bloque de código mientras una condición sea verdadera.
La condición se evalúa antes de la primera iteración, por lo que si es falsa, no se realizará ninguna iteración.
BUCLE DO... WHILE
El bucle do... while es exactamente igual que el bucle while con la única diferencia de que la condición se evalúa después de cada iteración y no antes.
Un ejemplo práctico de su utilidad puede ser una clave de acceso:
REPEAT
repeat() técnicamente es una función y no una estructura iterativa, sin embargo, permite implementar iteraciones de otra manera que puede ser interesante para determinados usos.
for (i in 1..100) { ... } // intervalo cerrado, incluye 1 y 100.
for (i in 1 until 100) { ... } // intervalo medio abierto, no incluye 100.
for (x in 2..10 step 2) { ... } // intervalo cerrado con salto de 2 en 2.
for (x in 10 downTo 1) { ... } // intervalo inverso.
(1..10).forEach { ... } // otra forma de expresar un bucle for. Igual que C#
for (i in array.indices) {
println(array[i])
}
for ((index, value) in array.withIndex()) {
println("el elemento en el índice $index es $value")
}
var indice = 1
while (indice <= 10) {
println(indice++)
}
// Tambien puede ser una sentencia
while (indice <= 10) println(indice++)
var intentos = 0
var clave: Int
do {
println("Intentos: ${intentos++}")
println("Introduzca su código de acceso: ")
clave = readln().toInt()
} while (clave != 1234 && intentos < 3)
if (clave == 1234) println("bienvenido")
else println("Cuenta bloqueada.")