La expresión When en Kotlin

When sustituye el operador switch que es habitual en otros lenguajes.

La manera más habitual de utilizarlo es esta

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
        print("x no es ni 1 ni 2")
    }
}

Dentro de la expresión de when se comparan los posibles valores hasta que se cumple una condición. La expresión else es evaluada si ninguna de las condiciones superiores se han cumplido.

Se pueden aplicar varios valores separados por una coma para establecer una condición:

when (x) {
    0, 1 -> print("x == 0 o x == 1")
    else -> print("Cualquiera.")
}

Podemos usar expresiones arbitrarias, no sólo constantes para las condiciones:

when (x) {
    parseInt(s) -> print("s convierte a entero")
    else -> print("s no convierte a entero")
}

Podemos también comparar rangos:

when (x) {
    in 1..10 -> print("x está en el rango")
    in validNumbers -> print("x es válido")
    !in 10..20 -> print("x está fuera del rango")
    else -> print("No se cumple nada de lo anterior")
}

Otra posibilidad es comprobar si el valor pertenece a un tipo de variable:

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

When puede usarse como un sustituo de if-else. Si no se proporciona argumento las condiciones se basan en expresiones booleanas simples, se ejecuta la condición cuando es verdadera:

when {
    x.isCondicion1() -> print("x es Condicion1")
    x.isCondicion2() -> print("x es Condicion2")
    else -> print("x no es ni Condicion1 ni Condicion2")
}

También podemos usar when dentro de una variable de la siguiente manera:

fun Request.getBody() =
        when (val response = executeRequest()) {
            is Success -> response.body
            is HttpError -> throw HttpException(response.status)
        }

Como podéis ver Kotlin ha creado una expresión para sustituir a switch muy potente que nos ayuda bastante en la tarea de desarrollo.

Comentarios