En Kotlin, cuando reemplaza el operador de cambio de otros lenguajes como Java. Un determinado bloque de código debe ejecutarse cuando se cumple alguna condición. El argumento de expresión when se compara con todas las ramas una por una hasta que se encuentra alguna coincidencia. Después de encontrar la primera coincidencia, llega al final del bloque when y ejecuta el código junto al bloque when. A diferencia de los casos de cambio en Java o cualquier otro lenguaje de programación, no requerimos una declaración de interrupción al final de cada caso. En Kotlin, when puede usarse de dos formas:
- cuando como una declaración
- cuando como expresión
Usar when como una declaración con else
when puede usarse como una declaración con o sin otra rama. Si se usa como declaración, los valores de todas las ramas individuales se comparan secuencialmente con el argumento y ejecutan la rama correspondiente donde la condición coincide. Si ninguna de las ramas está satisfecha con la condición, ejecutará la otra rama.
Kotlin
import java.util.Scanner; fun main(args: Array<String>) { var reader = Scanner(System.`in`) print("Enter any largebody:") var lb = reader.next() when(lb) { "Sun" -> println("Sun is a Star") "Moon" -> println("Moon is a Satellite") "Earth" -> println("Earth is a planet") else -> println("I don't know anything about it") } }
Producción:
Enter any largebody: Sun Sun is a Star Enter any largebody: Mars I don't know anything about it
Usar when como una declaración sin otra cosa
Podemos usar when como una declaración sin otra rama. Si se usa como declaración, los valores de todas las ramas individuales se comparan secuencialmente con el argumento y ejecutan la rama correspondiente donde la condición coincide. Si ninguna de las ramas está satisfecha con la condición, simplemente sale del bloque sin imprimir nada en la salida del sistema.
Kotlin
import java.util.Scanner; fun main(args: Array<String>) { var reader = Scanner(System.`in`) print("Enter name:") var lb = reader.next() when(lb) { "Sun" -> println("Sun is a Star") "Moon" -> println("Moon is a Satellite") "Earth" -> println("Earth is a planet") } }
Producción:
Enter name: Mars Process finished with exit code 0
Usando when como una expresión
Si se usa como expresión, el valor de la rama con la cual se cumple la condición será el valor de la expresión total. Como expresión cuando devuelve un valor con el que coincide el argumento y podemos almacenarlo en una variable o imprimirlo directamente.
Kotlin
import java.util.Scanner; fun main(args: Array<String>) { var reader = Scanner(System.`in`) print("Enter the month number:") var monthOfYear = reader.nextInt() var month = when(monthOfYear){ 1->"January" 2->"February" 3->"March" 4->"April" 5->"May" 6->"June" 7->"July" 8->"August" 9->"September" 10->"October" 11->"November" 12->"December" else -> { println("Not a month of year") } } println(month) }
Producción:
Enter the month number:8 August
Si ninguna de las condiciones de la bifurcación se cumple con el argumento, se ejecuta la bifurcación else. Como expresión, la bifurcación else es obligatoria, a menos que el compilador pueda probar que todos los casos posibles están cubiertos con condiciones de bifurcación. Si no podemos usar otra rama, dará un error de compilación.
Error:(6, 17) Kotlin: 'when' expression must be exhaustive, add necessary 'else' branch
Diferentes formas de usar when the block en Kotlin
Combina múltiples ramas en una usando comas:
Podemos usar varias ramas en una sola separadas por una coma. Cuando algunas ramas comparten la lógica común, podemos combinarlas en una sola rama. En el ejemplo a continuación, debemos verificar que el cuerpo grande ingresado sea un planeta o no, por lo que combinamos todos los nombres de los planetas en una sola rama. Cualquier cosa ingresada que no sea el nombre del planeta ejecutará la rama else.
Kotlin
import java.util.Scanner; fun main(args: Array<String>) { var reader = Scanner(System.`in`) print("Enter name of planet: ") var name = reader.next() when(name) { "Mercury","Earth","Mars","Jupiter" ,"Neptune","Saturn","Venus","Uranus" -> println("Planet") else -> println("Neither planet nor star") } }
Producción:
Enter name of planet: Earth Planet
Compruebe el valor de entrada en el rango o no:
Usando el operador in o !in , podemos verificar el rango de argumento pasado en el bloque when. El operador ‘in’ en Kotlin se usa para verificar la existencia de una variable o propiedad particular en un rango. Si el argumento se encuentra en un rango particular, el operador in devuelve verdadero y si el argumento no se encuentra en un rango particular, !in devuelve verdadero.
Kotlin
import java.util.Scanner; fun main(args: Array<String>) { var reader = Scanner(System.`in`) print("Enter the month number of year: ") var num = reader.nextInt() when(num){ in 1..3 -> println("It is spring season") in 4..6 -> println("It is summer season") in 7..8 ->println("It is rainy season") in 9..10 -> println("It is autumn season") in 11..12 -> println("It is winter season") !in 1..12 ->println("Enter valid month of year") } }
Producción:
Enter the month number of year: 5 It is summer season Enter the month number of year: 14 Enter valid month of year
Verifique que la variable dada sea de cierto tipo o no:
Usando el operador is o !is podemos comprobar el tipo de variable pasada como argumento en el bloque when. Si la variable es de tipo Integer, Int devuelve verdadero; de lo contrario, devuelve falso.
Kotlin
fun main(args: Array<String>) { var num: Any = "GeeksforGeeks" when(num){ is Int -> println("It is an Integer") is String -> println("It is a String") is Double -> println("It is a Double") } }
Producción:
It is a String
Usando when como reemplazo de una string if-else-if:
Podemos usar when como reemplazo de if-else-if. Si no se proporciona ningún argumento, las condiciones de la rama son simplemente expresiones booleanas y una rama se ejecuta solo cuando su condición es verdadera:
Kotlin
fun isOdd(x: Int) = x % 2 != 0 fun isEven(x: Int) = x % 2 == 0 fun main(args: Array<String>) { var num = 8 when{ isOdd(num) ->println("Odd") isEven(num) -> println("Even") else -> println("Neither even nor odd") } }
Producción:
Even
Verifique que una string contenga un prefijo o sufijo particular:
También podemos verificar el prefijo o el sufijo en una string determinada mediante el siguiente método. Si la string contiene el prefijo o el sufijo, devolverá el valor booleano verdadero; de lo contrario, devolverá falso.
Kotlin
fun hasPrefix(company: Any) = when (company) { is String -> company.startsWith("GeeksforGeeks") else -> false } fun main(args: Array<String>) { var company = "GeeksforGeeks a computer science portal" var result = hasPrefix(company) if(result) { println("Yes, string started with GeeksforGeeks") } else { println("No, String does not started with GeeksforGeeks") } }
Producción:
Yes, string started with GeeksforGeeks
Publicación traducida automáticamente
Artículo escrito por Praveenruhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA