Recherche…


Remarques

Contrairement au switch Java, l'instruction when n'a pas de comportement de chute. Cela signifie que si une branche est appariée, le flux de contrôle retourne après son exécution et aucune instruction de break n'est requise. Si vous voulez combiner les comportements pour plusieurs arguments, vous pouvez écrire plusieurs arguments séparés par des virgules:

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

Déclaration standard if

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!")
}

Les autres branches sont facultatives dans les instructions if normales.

Si-déclaration en tant qu'expression

Les déclarations if peuvent être des expressions:

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

Notez que la classe else -branch n'est pas facultative si l'instruction if est utilisée comme expression.

Cela peut également être fait avec une variante multi-lignes avec des accolades et plusieurs else if instructions else if .

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

ASTUCE: Kotlin peut déduire le type de la variable pour vous mais si vous voulez être sûr du type, annotez-le simplement sur la variable comme: val str: String = cela renforcera le type et le rendra plus lisible.

Quand-instruction au lieu de if-else-if

L'instruction when est une alternative à une instruction if avec plusieurs branches if-if-branches:

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

Même code écrit en utilisant une chaîne 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!")
}

Tout comme avec l'instruction if, la branche else est facultative et vous pouvez ajouter autant ou peu de branches que vous le souhaitez. Vous pouvez également avoir des branches multilignes:

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

L'argument quand-instruction correspond

Quand on lui donne un argument, le when -statement correspond à l'argument contre les branches dans l'ordre. La correspondance est effectuée à l'aide de l'opérateur == qui effectue des vérifications NULL et compare les opérandes à l'aide de la fonction equals . Le premier correspondant sera exécuté.

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

L'instruction when connaît également des options de correspondance plus avancées:

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
}

Quand-déclaration en tant qu'expression

Comme si, quand peut aussi être utilisé comme une expression:

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

Pour être utilisée comme une expression, l'instruction when doit être exhaustive, c'est-à-dire avoir une autre branche ou couvrir toutes les possibilités avec les branches d'une autre manière.

Quand-déclaration avec énumérations

when peut-on utiliser des valeurs 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 ->   // ...
    }
}

Comme vous pouvez le voir dans la deuxième ligne de cas ( Monday et Tuedsay ), il est également possible de combiner plusieurs valeurs enum .

Si vos cas ne sont pas exhaustifs, la compilation affichera une erreur. Vous pouvez utiliser else pour gérer les cas par défaut:

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

Bien que la même chose puisse être faite en utilisant la construction if-then-else , when prend soin des valeurs enum manquantes et le rend plus naturel.

Cliquez ici pour plus d'informations sur kotlin enum



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow