Kotlin 2.4
Ejercicios de Kotlin sobre when
4 ejercicios de when en Kotlin. Piensa la respuesta antes de abrirla: la explicación dice por qué las demás opciones fallan.
1 · Elige la respuesta · nivel 1
¿Qué imprime este código?
val nota = 7val texto = when (nota) { in 0..4 -> "suspenso" in 5..6 -> "aprobado" in 7..8 -> "notable" else -> "sobresaliente"}println(texto)- Anotable
- Baprobado
- Csobresaliente
- DNo compila: when no admite rangos
Ver la respuesta
Respuesta: A. notable
Cada rama de when puede comprobar si el valor está dentro de un rango con in. Se elige la primera rama que coincide.
2 · Elige la respuesta · nivel 2
¿Qué imprime este código?
val x = 7val kind = when { x < 0 -> "negativo" x % 2 == 0 -> "par" else -> "impar"}println(kind)- Aimpar
- Bpar
- Cnegativo
- DNo compila: when necesita argumento
Ver la respuesta
Respuesta: A. impar
Un when sin argumento evalúa cada condición en orden, como una cadena de if-else. 7 no es negativo ni par, así que cae en else.
3 · Elige la respuesta · nivel 2
¿Qué imprime este código?
sealed interface Eventdata class Click(val x: Int) : Eventdata object Close : Event fun describe(e: Event) = when (e) { is Click if e.x < 0 -> "fuera" is Click -> "clic en ${e.x}" Close -> "cerrar"}println(describe(Click(-3)))- Afuera
- Bclic en -3
- CNo compila: when no admite condiciones
- Dcerrar
Ver la respuesta
Respuesta: A. fuera
Desde Kotlin 2.2, una rama de when con sujeto puede añadir una condición de guarda con if. Se evalúan en orden, así que Click(-3) entra en la primera rama.
4 · Encuentra el fallo · nivel 2
El usuario escribe SALIR y responde desconocido. ¿Qué línea tiene el fallo?
1val cmd = "SALIR"2when (cmd.lowercase()) {3 "Salir" -> println("adiós")4 else -> println("desconocido")5}Ver la respuesta
El fallo está en la línea 3:
"Salir" -> println("adiós")Se arregla con"salir" -> println("adiós").El sujeto ya está en minúsculas, así que la rama tiene que compararse con "salir". Otra opción es when { cmd.equals("salir", ignoreCase = true) -> ... }.