La Expresión if En Kotlin

Este tutorial te ayudará a usar la expresión if en Kotlin para que puedas bifurcar el flujo de tus aplicaciones, al evaluar condiciones.

If Como Sentencia

La estructura de control if, te ayuda a conducir el flujo de tu aplicación, basada en la evaluación de una expresión que produzca un resultado booleano.

if(expresion){
    // Acciones si se cumple
}else if (expresion2){
    // Acciones si se cumple
}else{
    // Acciones si nada se cumple
}

Procesa el resultado adverso de la expresión con else y agrega más evaluaciones alternas con else if.

Ejemplo: Determinar si el jugador puede aprender una habilidad que requiere el nivel 45.

fun main() {
    val level = 12

    if (level >= 45) {
        println("Aprendiste Acrobacia")
    } else {
        println("Se requiere nivel 45. Nivel actual $level")
    }
}

El resultado sería:

Se requiere nivel 45. Nivel actual 12

El flujo de ejecución ejecuto las sentencias del cuerpo de else, porque obviamente 12 es menor a 45.

If Como Expresión

A diferencia de Java, el condicional if es una expresión primaria en Kotlin.

Esto significa que al evaluar una condición produce un valor, que puede ser usado en el retorno de una función o en la asignación a una variable.

Veamos el contraste con un ejemplo.

Ejemplo: Evaluar la vida del enemigo, si es menor o igual a 15, establecer el ataque de la carta en 9, de lo contrario en 6.

fun main() {
    val enemyHeroHealth = 16

    val cardAttack: Int
    if (enemyHeroHealth <= 15) {
        cardAttack = 9
    } else {
        cardAttack = 6
    }

    println("Ataque:$cardAttack")
}

El anterior uso del if como sentencia puede ser reescrito con la siguiente expresión:

val cardAttack = if (enemyHeroHealth <= 15) 9 else 6

De esta forma mejoras la legibilidad para un if cuyo propósito es muy simple para la sintaxis tradicional.

fun main() {
    val enemyHeroHealth = 16
    val cardAttack = if (enemyHeroHealth <= 15) 9 else 6

    println("Ataque:$cardAttack")
}

El resultado sería:

Ataque:6

If Y Else En Expresión

Es obligatorio usar else cuando usas if como expresión. De lo contrario el compilador te marcará el error.

'if' must have both main and 'else' branches if used as an expression
'if' must have both main and 'else' branches if used as an expression

Usar Ramas Como Bloques

La rama if y else pueden ser convertidas en bloques si usas llaves. Esto quiere decir que puedes tener múltiples líneas en el cuerpo de cada una.

La última expresión debe ser el valor resultante del bloque.

Por ejemplo, modifiquemos el código anterior para agregar impresiones correspondientes al valor establecido.

fun main() {
    val enemyHeroHealth = 16

    val cardAttack = if (enemyHeroHealth <= 15) {
        println("Grrrrrrrr!!")
        9
    } else {
        println("...")
        6
    }

    println("Ataque:$cardAttack")
}

La salida del programa será:

...
Ataque:6

Si remueves el valor 6 de la rama else, verás que el compilador infiere el tipo como Any, ya que println() retorna en Unit, y se realiza un casting.

Contional branch result of type Unit is implicitly cast to Any

Al ejecutar la aplicación así, la variable cardAttack habrá tomado una referencia Unit.

...
Ataque:kotlin.Unit

Si quieres asegurar que el valor sea siempre entero, entonces especifica Int en la declaración de la variable.

De esta forma el compilador no inferirá otros tipos y se te presentará el error guía.

¿Qué Sigue?

Al terminar con la expresión if en Kotlin, lo siguiente es usar la expresión when para cubrir estructuras de condición más complejas.

Únete Al Discord De Develou

Si tienes problemas con el código de este tutorial, preguntas, recomendaciones o solo deseas discutir sobre desarrollo Android conmigo y otros desarrolladores, únete a la comunidad de Discord de Develou y siéntete libre de participar como gustes. ¡Te espero!