En complément de la gestion des conditions, nous allons voir une autre façon de gérer les différents cas qui peuvent se produire. Lorsqu’on doit effectuer plus de 2 comparaisons, le if n’est pas toujours le plus pratique.
Imaginons qu’on ait besoin de tester les 3 cas possibles pour un nombre par rapport à 10 : soit il est égal à 10, soit il lui est inférieur, soit il est plus grand.
On pourrait écrire ce programme en utilisant le if :
nombre := 7
if nombre == 10 {
print("égal")
} else if nombre < 10 {
print("inférieur")
} else if nombre > 10 {
print("supérieur")
}
Remarquez que lorsque les 2 premiers tests échouent, le dernier test est forcément vrai. On pourrait simplifier le code en ommetant le dernier test comme suit :
nombre := 7
if nombre == 10 {
print("égal")
} else if nombre < 10 {
print("inférieur")
} else {
print("supérieur")
}
Il existe une forme plus élégante d’écrire ce programme grâce aux instructions switch et case :
nombre := 7
switch {
case nombre == 10:
print("égal")
case nombre < 10:
print("inférieur")
default:
print("supérieur")
}
Chaque cas à tester se décrit avec l’instruction case suivie du test à réaliser et de deux points.
case nombre == 10:
On ajoute à la ligne les différentes instructions à exécuter si la condition est vraie.
case nombre == 10:
print("égal")
Si aucun cas n’est vérifié, c’est l’instruction default qui est exécutée :
default:
print("supérieur")
Le switch délimite tous les cas possibles en les entourant d’une accolades ouvrantes et fermantes.
switch {
...
}
Pour cette exercice, nous nous prenons pour un cinéma de quartier qui aurait besoin d’un logiciel pour nous donner le prix de la place en fonction de l’année de naissance du client. Il existe 3 tarifs :
Réfléchissons un peu !
On a déjà écrit le code pour calculer l'âge d'une personne dans un précédent exemple. On va juste recopier cette partie.
Pour les tarifs, comme il y en a 3, mieux vaut utiliser la construction _switch case_ plutôt que _if_. Chaque tarif sera traité par un cas, avec le tarif autre dans l'instruction _default_.
Voilà ce que cela pourrait donner :
package main
func main() {
naissance := 2000
maintenant := 2023
age := maintenant - naissance
switch {
case age < 18:
print("5 €")
case age >= 65:
print("7 €")
default:
print("9 €")
}
}