streakode

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. 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. 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. 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. 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) -> ... }.

Más temas de Kotlin

Ver toda la ruta de Kotlin