Kotlin control de flujo con if and when

En este post vamos a entender como crear sentencias de control de flujo if / when con Kotlin.

La sentencia “if” para el control de flujo

En Kotlin una sentencia if tiene esta forma.

if(condition) {
   // some code under this condition 
}

Podemos también ver sentencias con else

if(condition) { 
  // some code under this condition    
} else { 
 // some code under this ´else´ condition 
}

Miremos este ejemplo en el que usamos varias condiciones

var age = 30
if (age > 40) {
    println("Age is over 40")
} else if (age == 40) {
    println("Age is 40")
} else {
    println("Age is less than 40")
}

Diferente a Java, if else en Kotlin puede ser usado para retornar un valor y asignarlo a una variable.

Por ejemplo: Aquí asignamos directamente el resultado de multiplicar la edad por un valor, según cada condición, a la variable risk.

fun main() {
    var age = 30
    var risk = if (age > 40) {
        println("Age is over 40")
        age * 0.10
    } else if (age == 40) {
        println("Age is 40")
        age * 0.9
    } else {
        println("Age is less than 40")
        age * 0.05
    }
    println("The result of risk is $risk")
}

Kotlin If

La expresión “when” para el control de flujo

Si vienes desde Java, seguramente conoces “switch”. Kotlin tiene en cambio un when en reemplazo de “switch” pero when es mucho más poderoso.

Mira este ejemplo: Evaluamos diferentes valores y en caso de que no se cumpla alguno el flujo pasa por else.

var age = 30
when (age) {
    30 -> println("age == 30")
    40 -> println("age == 40")
    else -> {
        // block code
        println("the age is $age")
    }
}

// output -> age == 30

Kotlin when

Pasando varios valores a when : Podemos evaluar varios valores simultáneamente en la misma condición.

var age = 5
when (age) {
    1,2,3,4,5 -> println("age is between 1 - 5")
    6,7,8,9,10 -> println("age is between 6 - 10")
    else -> println("the age is $age")
}

// output -> age is between 1 - 5

Podemos incluir rangos:

age = 5
when (age) {
    in 1..5 -> println("age is in the range 1..5")
    in 6..10 -> println("age is in the range 6..10")
    else -> println("the age is $age")
}

// output -> age is in the range 1..5

Usar negativos es muy simple en conjunto con rangos:

var age = 20
when (age) {
    in 1..5 -> println("age is in the range 1..5")
    in 6..10 -> println("age is in the range 6..10")
    !in 1..10 -> println("the age is $age")
}

// output -> the age is not in range 1..10

Podemos crear funciones rápidas usando when

fun ageDescription (age: Int) = when(age) {
    in 1..18 -> "Minor"
    in 19..70-> "Adult"
    else-> "Retired"
}

fun main() {

    var age = 50
    println(ageDescription(age))

}

// output -> Adult

Conclusión

Hicimos una revision rápido de los puntos más importantes acerca del control de flujo usando “if” and “when” in Kotlin. El punto destacado es la habilidad para asignar el valor de retorno directamente a la variable. Sumado a esto, la inclusión del “when” es más eficiente y puede reemplazar a “if” la mayoria de las veces.