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 = 10
if (nombreDeCookies == 10) {
//Une action
} else if (nombreDeCookies == 15) {
//Une autre action
} else if (nombreDeCookies == 20) {
//Une autre action
} else if (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 = 10 

when(nombreDeCookies) {
10 -> //Une Action sur une ligne
15 -> //Une Action sur une ligne
20 -> //Une Action sur une ligne
30 -> //Une Action sur une ligne
else -> //une action sur une ligne
}
var nombreDeCookies = 10 

when(nombreDeCookies) {
10 ->{
// Une action
// sur plusieurs
// ligne
}
15 -> //Une Action sur une ligne
20 -> //Une Action sur une ligne
30 -> //Une Action sur une ligne
else -> //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 = 10 

if (nombreDeCookies == 10) {
//Une action si le nombre de cookes est 10
} else if (nombreDeCookies < 15) {
//Une autre action si le nombre de cookies est superieur à 15
} else if (nombreDeCookies == 20) {
//Même action que pour == 10
} else {
//Autre action
}

La même chose en When :

var nombreDeCookies = 10
when(nombreDeCookies) {    10, 20 -> //Une Action sur une ligne    in 0..15 -> //Une autre action si le nombre de cookies est inferieur à 15    else -> //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
} else if (nom.equals("Lara Croft")) {
//Une autre action
} else if (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 = true 

when(isAGoodBoy) {
true -> println("Vrai")
false -> println("Faux")
}