Estructura when de Kotlin para múltiples condiciones

Clase 11 de 35Curso de Kotlin

Resumen

La sentencia when en Kotlin ofrece una manera eficiente y fácilmente legible de gestionar múltiples condiciones en tus programas. Para estructuras con más de dos condiciones, utilizar when en lugar de if-else anidados mejora la claridad del código y facilita su mantenimiento.

¿Qué es y cómo funciona la sentencia when en Kotlin?

La estructura when permite evaluar diferentes casos y ejecutar acciones según corresponda. Cada caso se evalúa en el orden establecido, asociando una condición con la acción a realizar mediante una flecha ->. Al igual que otras estructuras de control, soporta la ejecución múltiple con llaves {} si hay varias acciones implicadas.

Por ejemplo, al evaluar correos de usuarios:

  • Si contiene "admin", lo clasifica como administrador.
  • Si contiene "support", lo clasifica como soporte.
  • En otros casos, lo clasifica como usuario normal.
when {
    email.contains("admin") -> println("administrador")
    email.contains("support") -> println("soporte")
    else -> println("usuario normal")
}

¿En qué situaciones conviene utilizar la sentencia when?

Se recomienda emplear when especialmente en estos casos:

  • Al manejar más de tres condiciones claramente diferenciadas.
  • Cuando cada condición lleva asociada una secuencia de comandos específicos.

La estructura queda mucho más organizada que múltiples if-else, facilitando su comprensión y modificaciones posteriores.

¿Cómo asignar valores con la estructura when?

Al igual que la estructura if-else, la estructura when permite asignar directamente valores según una condición. La última instrucción ejecutada dentro del bloque del when determina el valor retornado hacia una variable.

val tipoUsuario = when {
    email.contains("admin") -> "administrador"
    email.contains("support") -> "soporte"
    else -> "usuario normal"
}

En el ejemplo anterior, Kotlin infiere automáticamente que el tipo de dato asignado es String.

¿Qué ocurre al pasar argumentos en el when?

Al pasar una variable o argumento al when, se evalúa sobre la base del valor especificado, comparando lo recibido con diferentes casos enumerados:

val proveedor = readLine()
when (proveedor) {
    "Gmail" -> println("Google Mail")
    "Yahoo" -> println("Yahoo Mail")
    "Outlook" -> println("Microsoft Outlook")
    else -> println("Otro proveedor")
}

Esto simplifica comparaciones y visualización específica a valores puntuales.

¿Cómo agrupar condiciones en when?

Kotlin permite agrupar varias condiciones en un mismo caso del when usando operadores lógicos:

val resultado = when {
    email.contains("@") && email.contains(".com") && email.contains("Gmail") -> "correo válido del proveedor Gmail"
    email.contains("@") && email.contains(".com") -> "correo válido"
    else -> "correo no válido"
}

Ejercicio práctico: evaluar la fortaleza de una contraseña

Para reforzar lo aprendido, practica evaluando contraseñas según su longitud usando when. Clasifica como:

  • "Fuerte", si es mayor o igual a 8 caracteres.
  • "Media", si es mayor o igual a 6 caracteres.
  • "Débil", en todos los demás casos.
fun evaluarPassword(password: String): String =
    when {
        password.length >= 8 -> "fuerte"
        password.length >= 6 -> "media"
        else -> "débil"
    }

Recuerda probar esta función ejecutando tu programa y proporcionando diferentes longitudes de contraseña.