Los condicionales en Kotlin: if y when

02-04-2018 - Andrés Cruz

In english

Los condicionales son un elemento fundamental en cualquier lenguaje de programación, nos permite realizar bifurcaciones en el código en base a una condición establecida en los mismos. En esta entrada veremos cómo emplear los condicionales if y when que viene siendo una variante del switch en Kotlin.

Condicionales if

El condicional if() es muy similar al empleado en cualquier otro lenguaje de programación como Java, PHP, JavaScript, etc.

Pero tiene un interesante añadido que permite indicar si la última expresión de un condicional es un valor, entonces podemos asignar dicho valor a alguna variable; es decir:

var x = 5
val h = if (x > 0) {
   // otras operaciones
    true
} else { 
   // otras operaciones
    false
}

Retorno de valores/variables en el condicional

En este pequeño ejemplo, comparamos la variable x al valor retornado por el condicional, que puede ser true o false dependiendo del valor que tenga la variable x en un momento dado (para el ejemplo h tendría el valor true); para emplear esta estructura debemos dejar el valor que queremos retornar (en este caso un booleano) al final de los condicionales (el if y el else, por supuesto, el condicional puede implementar cualquier otra lógica o serie de operaciones, pero los valores de retorno -los que queremos establecer en la variable asignada- deben estar establecidos al final del condicional).

Esto es una interesante funcionalidad que tiene Kotlin que permite reducir la cantidad de líneas de código cuando queremos expresar una jerarquía de condicionales, la redundancia en la asignación a variables finales y nos permite tener código más conciso y legible que se traduce en una mejor experiencia al momento de desarrollar nuestras aplicaciones, y por supuesto, prácticamente podemos emplear este esquema con cualquier otra estructura.

Verificar si una variable es nula: autocasteo

Un punto muy importante, es que aparte de las implementaciones que vimos anteriormente para emplear las propiedades de las variables de tipo NULLable o que puede ser nula en Kotlin mediante un condicional:

val str: String? ="Kotlin"

if (str != NULL) {
    println(str.length)
}

Recordemos que si una variable es declarada como NULLable, significa que puede ser nula en algún momento y por lo tanto obligatoriamente debemos emplear los operadores que empleamos en una anterior entrada para evitar referencias nulas, pero al realizar la verificación anterior, podemos saltarnos este paso de emplear los operadores, ya que el compilador de Kotlin hace un autocasteo a la variable NULLable que estemos comprobando y de esta manera podemos emplear cualquier propiedad sin la necesidad de estos operadores.

Otra expresión que podemos emplear para cuando tenemos muchos condicionales es la expresión when que viene siendo el equivalente de la expresión switch de otros lenguajes de programación pero también potenciada:

Podemos expresar valores por rango:

when (x) {
    in 1..9 -> print("x es un número entero positivo de una cifra")
    else -> print("x no es un número entero positivo de una cifra")
}

Podemos emplear funciones para indicar el tipo de dato de la variable:

when (x) {
    is String -> print("x es un texto")
    else -> print("ninguno de los anteriores")
}

Emplear funciones propias o de alguna API:

fun mas_cinco(x: Int): Int {
   return x+5
}

when (x) {
   in 1..9 -> print("x es un número entero de una cifra")
   mas_cinco(x) -> print("x es válido")
   !in 10..20 -> print("x está fuera de rango")
   else -> print("ninguno de los anteriores")
}

Indicar que un número sea par:

when (x){
    x.isEven() -> print("x es par")
    else -> print("x es impar")
}

O indicar que sea impar, negando la función anterior:

when (x){
    !x.isEven() -> print("x es par")
    else -> print("x es impar")
}

O empleando la función para indicar que el número sea impar:

when (x){
    x.isOdd() -> print("x es impar")
    else -> print("x es par")
}

Estos últimos ejemplos estamos empleando funciones de extensión para definir isOdd() y isEven() que será tema de otra entrada.

También como puedes ver en el código anterior, podemos emplear la palabra reservada else que funciona igual que el default en otros lenguajes de programación.

Podemos decidir no expresar el valor en cláusula when y en vez de esto expresarlo en cada uno de los casos.

when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

Realizar operaciones matemáticas:

when(x) {
    10 + 20 -> print("30")
    else -> print("Otro valor")
}

Que por supuesto estos valores pueden ser variables.

También podemos emplear el bloque definido del when para retornar un valor y este sea asignado a una variable, al igual que hicimos con el if anteriormente:

val r = when(x) {
    10 + 20 -> "30"
    else -> "Otro valor"
}

Podemos combinar todas estas opciones que vimos anteriormente como queramos, la idea es presentar algunos de los posibles escenarios para tener una idea más clara del funcionamiento de este poderoso condicional que podemos emplear en Kotlin.

En esta entrada vimos cómo emplear los condicionales en Kotlin, en la siguiente entrada hablaremos sobre los ciclos o loops en Kotlin; puedes referirte a la documentación oficial en el siguiente enlace: Kotlin: Control Flow: if, when, for, while.


Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.

!Cursos a!

10$

En Udemy

Quedan 4 días!

Ver los cursos
¡Hazte afiliado en Gumroad!

!Cursos desde!

4$

En Academia

Ver los cursos

!Libros desde!

1$

Ver los libros
!Web Alojada en Hostinger!