Bucles en Kotlin
SOLUCIONARIO
Bucles en Kotlin
2025-06-20
Por
Occam's Razor

fun main () {
    var i = 0;
    val a = IntArray(10);

    for (j in 0..9) a[j] = 10 + j;
    while (i < 10) {
          println ("$i ->  ${a[i]}");
      i++;
    }
    println ("--------------------------------");
    do {
       i--;
       print ("$i -> ${a[i]}");
       if (i > 4) {
          println ();
      continue;
       }
       println ("**");
       if (i == 1) break;
    } while (i > 0);

    for (j in a) print ("$j ");
    println();
    for (j in a.indices) { print ("${a[j]} ");}
    println();
    for ((j,v) in a.withIndex()) { print ("$j -> $v ");}
    println();
    for (j in 9 downTo 0  step 2) print ("${a[j]} ");
    println ();
}

Kotlin nos ofrece bucles while, do .. while y for sobre objetos con iteradores al estilo foreach de otros lenguajes. El lenguaje ofrece varias posibilidades para generar rangos y así crear bucles clásicos. El programa muestra algunos ejemplos; .., downTo o step. until es otra función infija que nos permite generar rangos para nuestros bucles.

SABIAS QUE

Kotlin permite definir funciones denominadas infix. Estas funciones se pueden ejecutar en formato infijo o como métodos. Las dos expresiones que veremos a continuación son equivalentes:

for (j in 0 until 10 step 1) println ("$j");
for (j in 0.until(10).step(1)) println ("$j");

Además de esto, Kotlin ofrece las instrucción break y continue que nos permiten terminar prematuramente el bucle o continuar con la siguiente iteración como es habitual en la mayoría de lenguajes.

Cuando se trata de iterar los elementos de un array, la clase Array y derivadas ofrecen métodos para generar los rangos que necesitamos.

Al final del programa podéis encontrar algunos de los ejemplos más comunes.

  • indices nos permite iterar a través del array de la forma tradicional utilizando los índices del array.
  • withIndex nos permite obtener un par o tupla conteniendo el índice y su valor en un solo paso.

Podemos utilizar bucles for como los que hemos visto antes para iterar a través de cadenas de caracteres:

val cadena="Occam's Razor"
for (letra in cadena) {
   println (letra)
}

También podemos usar for para iterar Maps o tablas hash si lo preferís. En este caso obtenemos de una sola vez el par clave valor para cada elemento a no ser que utilicemos keys o values

val map = mapOf (
    "uno" to 1,
    "dos" to 2,
    "tres" to 3,
    )
for ((clave, valor) in map) {
    println ("$clave - $valor");
}
for ( clave in map.keys) {
    println (clave);
}
for ( valor in map.values) {
    println (valor);
}

SABÍAS QUE?

Kotlin ofrece una función forEach como alternativa a los bucles for pero con un aire de programación funcional.

numeros.forEach { numero ->
  println (numero)
} 

O si queremos recuperar también el índice:

numeros.forEachIndexed {indice, valor ->
  println ("$indice : $valor")
} 

Si, lo que sigue al forEach es una expresión lambda y es por ello que son más lentos que los bucles for normal, si bien, en ocasiones hacen que el código sea más legible.

Podemos generar bucles infinitos fácilmente con while:

while (true) {
  // Repite para Siempre
}

do {
  // Repite para siempre
} while (true)

Conseguir el mismo resultado con for es más complicado, puesto que for esta pensado para funcionar exclusivamente sobre iterables. El siguiente código generaría un bucle infinito con for:

for (i in generateSequence(0) { it }) {
  // Repite para siempre
}

Resumen

  • Kotlin ofrece bucles for, while y do .. while
  • Kotlin ofrece las palabras clave continue y break para controlar el progreso del bucle
  • Kotlin ofrece un interfaz funcional para construir bucles utilizando las funciones forEach y forEachIndexed
  • Los bucles for en Kotlin se pueden utilizar para recorrer cualquier estructura de datos iterable, como arrays, tablas hash o cadenas.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)