web-dev-qa-db-fra.com

Comment implémenter le commutateur dans Kotlin

comment implémenter le cas de commutateur dans Kotlin, pouvons-nous remplacer le code de cas de commutateur de Java dans Kotlin? Je veux ce code dans Kotlin

 switch (5) {
 
 cas 1: 
 // Codez 
 pause; 
 cas 2: 
 // Code 
 
 Pause; 
 Cas 3: 
 // Code 
 
 Pause; 
 
 
} 
 
15
Mayur Dabhi

Vous pourriez faire comme ça:

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}

extrait de aide officielle

9
navylover

When Expression when remplace l'opérateur de commutation des langages de type C. Dans la forme la plus simple, cela ressemble à ceci

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}

quand correspond son argument contre toutes les branches de manière séquentielle jusqu'à ce qu'une condition de branche soit remplie. Quand peut être utilisé comme expression ou comme déclaration. Si elle est utilisée comme expression, la valeur de la branche satisfaite devient la valeur de l'expression globale. S'il est utilisé en tant qu'instruction, les valeurs des branches individuelles sont ignorées. (Comme avec if, chaque branche peut être un bloc et sa valeur est la valeur de la dernière expression du bloc.)

5

switch in Java est en réalité when dans Kotlin. La syntaxe, cependant, est différente.

when(field){
    condition -> println("Single call");
    conditionalCall(field) -> {
        print("Blocks");
        println(" take multiple lines");
    }
    else -> {
        println("default");
    }
}

Voici un exemple d'utilisations différentes:

// This is used in the example; this could obviously be any enum. 
enum class SomeEnum{
    A, B, C
}
fun something(x: String, y: Int, z: SomeEnum) : Int{
    when(x){
        "something" -> {
            println("You get the idea")
        }
        else -> {
            println("`else` in Kotlin`when` blocks are `default` in Java `switch` blocks")
        }
    }

    when(y){
        1 -> println("This works with pretty much anything too")
        2 -> println("When blocks don't technically need the variable either.")
    }

    when {
        x.equals("something", true) -> println("These can also be used as shorter if-statements")
        x.equals("else", true) -> println("These call `equals` by default")
    }

    println("And, like with other blocks, you can add `return` in front to make it return values when conditions are met. ")
    return when(z){
        SomeEnum.A -> 0
        SomeEnum.B -> 1
        SomeEnum.C -> 2
    }
}

La plupart d'entre eux sont compilés dans switch, à l'exception de when { ... }, Qui est compilé en une série d'instructions if.

Mais pour la plupart des utilisations, si vous utilisez when(field), il est compilé en un fichier switch(field).

Cependant, je tiens à souligner que switch(5) avec un tas de branches est juste une perte de temps. 5 est toujours 5. Si vous utilisez switch, ou des instructions if, ou tout autre opérateur logique, vous devez utiliser une variable. Je ne suis pas sûr si le code est juste un exemple aléatoire ou si c'est du code réel. Je le signale au cas où ce serait le dernier.

4
Zoe