Buscar..


Observaciones

A diferencia del switch de Java, la instrucción when no tiene un comportamiento de caída. Esto significa que, si una rama coincide, el flujo de control regresa después de su ejecución y no se requiere una declaración de break . Si desea combinar los comportamientos para varios argumentos, puede escribir varios argumentos separados por comas:

when (x) {
    "foo", "bar" -> println("either foo or bar")
    else -> println("didn't match anything")
}

Declaración if estándar

val str = "Hello!"
if (str.length == 0) {
    print("The string is empty!")
} else if (str.length > 5) {
    print("The string is short!")
} else {
    print("The string is long!")
}

Las ramas else son opcionales en las sentencias if normales.

Declaración-if como una expresión

Las sentencias if pueden ser expresiones:

val str = if (condition) "Condition met!" else "Condition not met!"

Tenga en cuenta que else -branch no es opcional si la declaración- if se usa como una expresión.

Esto también se puede hacer con una variante multilínea con corchetes y múltiples declaraciones else if .

val str = if (condition1){
    "Condition1 met!" 
   } else if (condition2) {
    "Condition2 met!" 
   } else {
    "Conditions not met!"
   }

CONSEJO: Kotlin puede inferir el tipo de variable para usted, pero si desea estar seguro del tipo, simplemente anótelo en la variable como: val str: String = esto forzará el tipo y hará que sea más fácil de leer.

When-statement en lugar de if-else-if chains

La instrucción when es una alternativa a una instrucción if con varias sucursales else-if-branch:

when {
    str.length == 0 -> print("The string is empty!")
    str.length > 5  -> print("The string is short!")
    else            -> print("The string is long!")
}

El mismo código escrito usando una cadena if-else-if :

if (str.length == 0) {
    print("The string is empty!")
} else if (str.length > 5) {
    print("The string is short!")
} else {
    print("The string is long!")
}

Al igual que con la sentencia if, la rama else es opcional, y puede agregar tantas o tan pocas ramas como desee. También puedes tener ramas multilínea:

when {
    condition -> {
        doSomething()
        doSomeMore()
    }
    else -> doSomethingElse()
}

Cuando coinciden argumentos de declaración

Cuando se le da un argumento, el when -statement coincide con el argumento en contra de las sucursales en secuencia. La coincidencia se realiza utilizando el operador == que realiza verificaciones nulas y compara los operandos utilizando la función equals . La primera coincidencia será ejecutada.

when (x) {
    "English" -> print("How are you?")
    "German" -> print("Wie geht es dir?")
    else -> print("I don't know that language yet :(")
}

La instrucción when también conoce algunas opciones de comparación más avanzadas:

val names = listOf("John", "Sarah", "Tim", "Maggie")
when (x) {
    in names -> print("I know that name!")
    !in 1..10 -> print("Argument was not in the range from 1 to 10")
    is String -> print(x.length) // Due to smart casting, you can use String-functions here
}

Cuando-declaración como expresión

Como si, cuando también se puede utilizar como una expresión:

val greeting = when (x) {
    "English" -> "How are you?"
    "German" -> "Wie geht es dir?"
    else -> "I don't know that language yet :("
}
print(greeting)

Para ser utilizada como una expresión, la instrucción when debe ser exhaustiva, es decir, tener una rama else o cubrir todas las posibilidades con las ramas de otra manera.

Cuando-declaración con enumeraciones

when se puede utilizar para hacer coincidir los valores de enum :

enum class Day {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

fun doOnDay(day: Day) {
    when(day) {
        Day.Sunday ->     // Do something
        Day.Monday, Day.Tuesday ->     // Do other thing
        Day.Wednesday ->  // ...
        Day.Thursday ->   // ...
        Day.Friday ->     // ...
        Day.Saturday ->   // ...
    }
}

Como puede ver en la segunda línea de casos ( Monday y Tuedsay ), también es posible combinar dos o más valores de enum .

Si sus casos no son exhaustivos, la compilación mostrará un error. Puedes usar else para manejar casos predeterminados:

fun doOnDay(day: Day) {
    when(day) {
        Day.Monday ->     // Work
        Day.Tuesday ->    // Work hard
        Day.Wednesday ->  // ...
        Day.Thursday ->   //
        Day.Friday ->     //
        else ->           // Party on weekend
    }
} 

Aunque se puede hacer lo mismo usando la construcción if-then-else , when se cuida de los valores de enum faltan y los hace más naturales.

Haga clic aquí para obtener más información sobre kotlin enum



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow