Estructuras de control en Kotlin

video[Tutorial Estructuras de control en Kotlin

Escribir código en Kotlin es similar a hacerlo en Java. Las principales estructuras de control (if, while, for, …) son muy parecidas. No obstante, hay algunas diferencias que pasamos a destacar.
El uso de ; es opcional al final de línea:

a = 0; b = a + 1;
c = b; 
a = 0; b = a + 1
c = b 
Como vemos en el código siguiente a la derecha, if se utiliza de igual forma que Java. Aunque Kotlin permite su uso en una expresión:
if (a > b) max = a
else       max = b 
max = if (a > b) a
      else       b
max = if (a > b) {
   print(a); a
} else {
   print(b); b
}   
Como se muestra a la derecha, Kotlin también permite una combinación de los dos estilos.
when reemplaza a switch: mejorando la legibilidad:
 
switch(x) {
  case 1:
     System.out.println("uno");
     break;
  case 2:
  case 3:
     System.out.println("2 o 3");
     break;
  default :
     System.out.println("error");
     error = true;
}
when(x) {
    1    -> print("uno")
    2, 3 -> print("2 o 3")
    else -> {
        println("error")
        error = true
    }
}  
Además, when permite su uso en expresiones:
s = when (objeto) {
   1          -> "Número uno"
   "Hola"     -> "Saludo"
   is Long    -> "Long"
   in 4..8    -> "Entre 4 y 8"
   else       -> "por defecto"
} 
n = when {
   x == 1              -> 1
   s.contains("hello") -> 2
   !x in 2..10         -> 3
   x is String         -> 5
   else                -> 6
} 
 Observa el ejemplo de la izquierda. objeto es comparado con expresiones de diferentes tipos. Además, se permite mezclar expresiones que se comparan con el valor indicado, con expresiones booleanas. Como se muestra en el ejemplo de la derecha, podemos omitir el valor a comprobar. En este caso hemos de utilizar expresiones booleanas.

Nota: Cuando when asigna un valor a una variable, es obligatorio poner un else o cubrir todos los casos posibles.

El típico bucle for desaparece. Ahora se utiliza un estilo similar a foreach de otros lenguajes o el basado en la clase Iterator de Java.
for (int i=1; i<=10; i++) {
   System.out.println(i);
} 
for (i in 1..10) {
   println("valor de i: "+i);
}    

Ahora hemos de recorrer los elementos de una colección. Una colección ha de seguir el interfaz Iterator (con las funciones next() y hasNesxt()).  Kotlin permite definir colecciones de forma sencilla como se muestra a continuación:
 

for (i in 4 downTo 1) …  //4,3,2,1
for (i in 1..9 step 2) … //1,3,6,8 
for (i in 1 until 4) … //1,2,3
for (c in "Hola") … //'H','o','l','a' 
Siguen esta interfaz los arrays, los string o las colecciones. En estos casos puede resultar útil recorrer la colección usando un índice:
for (i in array.indices) {
   print(array[i])
}  
for ((indice,valor) in array.withIndex()) {
  println("en posición $indice hay $va-lor")
}  
La estructura de control while funciona de forma convencional:
while (x > 0) {
   x--
} 
do {
   val x = obtenDatos()
while (x != null) //x es visible aquí 
Podemos salir de una estructura de control usando:
  • return : retornamos de la función actual (o función anónima).
  • break : terminamos el bucle más cercano.
  • continue : continuamos con el siguiente paso en el bucle más cercano.

Si no queremos salir de la estructura más cercana si no de otra, podemos utilizar etiquetas de salto.

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (...) break
        if (...) break@loop
    }
}