Cours

Control Flow 2

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

Last updated