Les if mais si on a beaucoup de tests à effectuer, ça peut vite devenir redondant et surtout “bavard” (comme le html… aaah…).

La case départ

Avec le case, on va gagner en lisibilité.

chaine_tele = "Arte"
 
case chaine_tele
when "TF1": puts "Pourquoi tu te fais du mal ?"
when "M6"
puts "T'es pas sérieux..."
when "Arte" then
puts "Aaah, Tracks juste après Audrey Hepburn."
else
puts "Eteins la télé, ça vaudra mieux."
end
→ Aaah, Tracks juste après Audrey Hepburn.

J’établis mon objet “chaine_tele”. J’ouvre le bloc avec case suivi de l’objet à tester. Chaque test commence avec un when suivi d’une valeur possible. Si c’est vrai, le code qui se trouve après les deux points (:) ou bien à la ligne suivante ou bien encore après le then est exécuté. Enfin, le cas par défaut est un else.

Les test se font de haut en bas, donc dès qu’un test est vrai, le code correspondant est exécuté.

Version plus flexible du case

Dans l’exemple précédent, le test n’est qu’un simple test d’égalité. Ca vient du fait que juste après case on marque la variable à tester. Si on enlève cette variable “cible” et qu’on la rajoute à chaque when, on peut effectuer des tests plus avancés, surtout des comparaisons

prix = 8
argent = 7
case
when prix > argent: puts "C'est la crise."
when prix < argent: puts "Pas assez cher."
else puts "Parfait."
end
→ C'est la crise.

Ici, on fait des comparaisons. On a enlevé la variable cible de la ligne où se trouve “case”. En 3 lignes, on a tous les cas possibles. C’est lisible et court.

Pas de break

Si vous connaissez d’autres langages, vous aurez remarqué qu’il n’y a pas de break. En effet, Ruby par défaut sort du bloc dès qu’un test est vrai. Ca peut paraître curieux, mais la raison évoquée est d’éviter que l’oubli d’un break fasse que l’on exécute le code en entier sans le vouloir.

Demain : on boucle tout!