Kotlin
Declaraciones condicionales
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