Précédemment nous avons vu les conditions avec if/else if/else, nous allons voir qu'il y a un autre moyen de faire des actions en fonction de la valeur d'une variable.
When
Avec un entier :
var nombreDeCookies =10if (nombreDeCookies ==10) {//Une action} elseif (nombreDeCookies ==15) {//Une autre action} elseif (nombreDeCookies ==20) {//Une autre action} elseif (nombreDeCookies ==30) {//Une autre action} else {//Action si la valeur ne rentre dans aucune des conditions suivantes}
Cet enchainement est assez indigeste à lire, avec Kotlin il y a une manière plus simple de vérifier plusieurs valeurs d'une variable.
var nombreDeCookies =10when(nombreDeCookies) {10->//Une Action sur une ligne15->//Une Action sur une ligne20->//Une Action sur une ligne30->//Une Action sur une ligneelse->//une action sur une ligne}
var nombreDeCookies =10when(nombreDeCookies) {10->{// Une action// sur plusieurs// ligne}15->//Une Action sur une ligne20->//Une Action sur une ligne30->//Une Action sur une ligneelse->//une action sur une ligne}
Avec if/else nous pouvons aussi vérifier si la valeur d'une variable est dans une fourchette et effectuer une même action pour deux valeurs différentes.
var nombreDeCookies =10if (nombreDeCookies ==10) {//Une action si le nombre de cookes est 10} elseif (nombreDeCookies <15) {//Une autre action si le nombre de cookies est superieur à 15} elseif (nombreDeCookies ==20) {//Même action que pour == 10} else {//Autre action}
La même chose en When :
var nombreDeCookies =10when(nombreDeCookies) {10, 20->//Une Action sur une lignein0..15->//Une autre action si le nombre de cookies est inferieur à 15else->//une action sur une ligne}
Avec un String
var nom ="Zelda"// Pour les entier on compare avec == //pour les String avec .equals() nous reviendront dessus plus tard.if (nom.equals("Zelda")) {//Une action} elseif (nom.equals("Lara Croft")) {//Une autre action} elseif (nom.equals("Link") {//Une autre action} else {//Autre action}
Équivalent en When :
var nom ="Zelda"when(nom) {in"Zelda"->println("Le nom est Zelda")in"Link"->println("Le nom est Link")in"Lara Croft"->println("Le nom est Lara Croft")else->println("Autre")}
Avec un Booléen
var isAGoodBoy =truewhen(isAGoodBoy) {true->println("Vrai")false->println("Faux")}