Kotlin cuando expresión

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *