Hola, me llamo Luis y hoy les traigo este nuevo artículo.
Índice
“When”
en Kotlin es la versión elegante del tradicional if-else
. Ofrece una legibilidad y una concisión superiores a if-else
La mayoría de las veces, nuestra aplicación debe decidir qué hacer en función del tipo de entrada que recibe.
La forma tradicional de hacer esto sería usar múltiples declaraciones if else
, tantas como el número de diferentes tipos posibles de entrada que nos interesan, más un caso predeterminado opcional o el else
. Si viene de Java, es posible que haya utilizado las declaraciones switch case
para hacer esto.
La forma «moderna» de hacer esto es como match case
en Scala y when
en Kotlin. El beneficio de ellos, a diferencia del tradicional if else
o la declaración switch case
, es que son mucho más limpios, más concisos y legibles.
En este breve tutorial, aprenderemos cómo usar la declaración when
en Kotlin.
El uso básico de when
es determinar qué hacer con una entrada en función de su valor. Un ejemplo clásico sería una aplicación que acepta un número y hace algo con él dependiendo del valor.
Así es como se escribiría en un when
declaración:
when { number < 0 -> println("please enter a positive number") number == 0 -> println("try any higher number than 0") number % 2 == 0 -> println("event") else -> println("it's an odd number") }
Es limpio, conciso y legible, ¿no?
Si las declaraciones anteriores se escribieran como un las declaraciones if else
, se vería así:
if (number < 0) { println("please enter a positive number") } else if (number == 0) { println("try any higher number than 0") } else if (number % 2 == 0) { println("event") } else { println("it's an odd number") }
¿Podemos todos estar de acuerdo en que when
la versión es mucho más elegante que la if else
?
Con Kotlin’s when
, también podemos pasarle un argumento. Veamos un ejemplo de cómo podemos hacer esto:
when (statusCode) { 200 -> println("all good") 400 -> println("it's a bad request") 404 -> println("that page is not found") else -> println("something went wrong") }
En este ejemplo, Kotlin sabe que estamos tratando de hacer coincidir el valor de statusCode
con los valores que especificamos en las condiciones dentro de la cláusula when
.
Entonces, Kotlin interpreta esto como statusCode == 400
y así sucesivamente hasta que alcanza la condición else
si nada coincide.
Otra cosa a tener en cuenta es que podemos asignar un valor a una variable como argumento when
. Veamos qué significa esto:
data class Payload(val message: String, val statusCode: Int) val payload = Payload("hello world", 200) when (val statusCode = payload.statusCode) { 200 -> println("all good $statusCode") 400 -> println("it's a bad request $statusCode") 404 -> println("that page is not found $statusCode") else -> println("something went wrong $statusCode") }
Esto es útil cuando usamos la misma variable en múltiples, si no todas, las condiciones dentro de nuestra cláusula when
.
En algunas circunstancias, nuestra aplicación puede aceptar diferentes tipos de entrada (es decir, entrada de tipo Any
) y la siguiente acción se basa completamente en ese tipo de entrada.
Un caso de uso real para esto es cuando nuestra aplicación consume mensajes de un tema de Kafka, que tiene múltiples tipos de eventos (conocidos como tipo union
). Nuestra expresión when
se vería así:
Si pasamos el mouse sobre el evento dentro de la cláusula when
, nuestro IDE (digamos IntelliJ) nos indicará que se le aplica la conversión inteligente.
Podemos escribir declaraciones de varias líneas dentro de la cláusula when
si es necesario. Echemos un vistazo a un ejemplo de esto:
Esto es conveniente, especialmente cuando necesitamos hacer algunas cosas sobre el valor que estamos procesando.
Podemos usar la declaración when
como expresión para asignar un valor a una variable. Echemos un vistazo a un ejemplo sencillo.
val code: Int = when (command) { "FAILED" -> 0 "SUCCESS" -> 1 "RETRY" -> 8 else -> 99 }
En la expresión anterior, estamos verificando el valor de command
y en base a eso, asignamos un valor a nuestra variable code
.
La declaración when
es un gran flujo de control proporcionado por Kotlin y una alternativa asombrosa a la buena declaración if else
anterior.
Cuando tenemos muchas condiciones para verificar un cierto valor, vale la pena considerar usar when
en lugar de if else
.
Nuestra legibilidad de código definitivamente aumentará cuando comencemos a reemplazar declaraciones if else
largas con when
.
Gracias por leer este artículo.
Añadir comentario