ProgramandooIntentándolo

Los condicionales if, else y when en Kotlin

reset css

En Kotlin como en otros lenguajes de programación existen las sentencias condicionales para ejecutar un fragmento de código u otro en función de que se cumplan o no determinadas condiciones y los nombres para estas condiciones son los habituales if, else y when, el equivalente al switch de Java o JavaScript.

Para determinar si se cumple o no una condición se utilizan los booleanos true y false (ej. var isRojo:Boolean = false), que se pueden utilizar directamente o también pueden ser el resultado de hacer alguna comparación mediante < <= > >= == != e incluso de varias comparaciones distintas utilizando alguno de los operadores lógicos (&& || !)

if en Kotlin

Con if en Kotlin se evalúa la condición introducida entre los paréntesis y si es cierta (el resultado es true) entonces ejecuta el bloque de código del if y si no se cumple se continua sin ejecutarlo.

 
if (condicion) {
    // El código de este bloque se ejecuta si se cumple la condición 
}

if else en Kotlin

Con el if Kotlin nos permite ejecutar un bloque de código concreto si se cumple cierta condición pero si queremos que se ejecute otro código distinto cuando no se cumpla esa condición podríamos utilizar otro if con la condición inversa o bien utilizar el else para conseguir un código más sencillo.

 
if (condicion) {
    // El código de este bloque se ejecuta si se cumple la condición 
} else {
    // Y esto es lo que se ejecuta si no se cumple
}

Vamos con un ejemplo muy sencillo de if else en Kotlin, en el que le preguntamos al usuario la edad y si tiene 18 años o más le dejamos pasar y sino le decimos los años que le quedan.

 
// Ejemplo usando if-else
println("¿Cuantos años tienes?")
var edad = readLine()!!.toInt();
if (edad >= 18) {
    println("Puedes pasar")
} else {
    println("Lo siento, vuelve dentro de " + (18 - edad) + " años")
}

// Lo mismo usando solo ifs
println("¿Cuantos años tienes?")
var edad = readLine()!!.toInt();
if (edad >= 18) {
    println("Puedes pasar")
}

if (edad < 18) {
    println("Lo siento, vuelve dentro de " + (18 - edad) + " años")
}

if else if en Kotlin

Y para terminar con los ifs vamos con el if-else-if que será la estructura que utilizaremos cuando queramos hacer distinciones cuando no se cumple la condición principal.

 
if (condicion) {
    // El código de este bloque se ejecuta si se cumple la condición 
} else if (condicion 2) {
    // Esto es lo que se ejecuta si no se cumple la condicion pero se cumple la condicion2
} else if (condicion 3) {
    // Esto es lo que se ejecuta si no se cumple la condicion, ni la condicion2 pero se cumple la condicion3
} else {
    // Esto es lo que se ejecuta si no se cumple ninguna de las condiciones anteriores
}

Podemos añadir tantos else if como queramos y opcionalmente también podemos añadir un else al final para que se ejecute en caso de que no se cumpla ninguna condición.

Y un ejemplo para entender mejor el if else if en Kotlin.

 
if (numero > 0) {
    println("Es un número positivo")
} else if (numero < 0) {
    println("Es un número negativo")
} else {
    println("Es 0")
}

En este ejemplo las opciones son excluyentes (un número no puede ser menor y mayor que 0 a la vez) pero en caso de que no lo fuesen como en el siguiente ejemplo siempre entra en el primer if para el que se cumpla la condición y como solo se puede ejecutar una de las opciones ya no pasará por el resto, por lo tanto en este ejemplo si el numero fuese 5 imprimiría simplemente Unidades aunque el 5 cumple las 3 condiciones.

 
if (numero > 0 && numero < 10) {
    println("Unidades")
} else if (numero < 100) {
    println("Decenas")
} else if (numero < 1000) {
    println("Centenas")
}

when en Kotlin

Si la condición que vamos a evaluar va a tomar un número determinado de valores que tenemos controlados a priori y para los que queremos ejecutar un código diferente podemos utilizar when en lugar de usar múltiples if else para hacer un código más legible.

 
when (condicion) {
    valor1 -> {//...}
    valor1 -> {//...}
    valorN -> {//...}
    else -> {//...}
}

Y una de la características interesantes de Kotlin es que los valores del when no tienen que ser solo valores fijos, sino que se pueden utilizar rangos y también se puede validar la condición contra funciones que definamos nosotros, vamos que podemos utilizar en el when las mismas condiciones que podemos usar en un if.

 
when (numero) {
    1,2 -> {
        // Es 1 o 2
    }
    in 3..10 -> {
        // Es un numero entre 3 y 10
    }
    !in 10..100 -> {
        // Es un numero que no esta entre el 10 y el 100
    }
    getEdadUsuario() -> {
        // El numero es igual que el resultado de la funcion getEdadUsuario
    }
    else -> {
        // Cualquier otra cosa
    }
}