Chapitre 10 — Sélectionner avec CASE
Vous vous retrouverez dans des situations où vous aurez besoin de tester la même variable
dans un nombre de cas différents, dont un seul apportera comme résultat l'exécution du code.
Un exemple qui me vient à l'esprit, c'est un système de menu. Bâtissons-le.
REM Système de Menu simple
CLS
PRINT "Taper 1 pour l'option 1"
PRINT "Taper 2 pour l'option 2"
PRINT "Taper 3 pour l'option 3"
INPUT "Entrez votre choix : " Choix%
IF Choix%=1 THEN PRINT "Vous avez choisi l'option 1"
IF Choix%=2 THEN PRINT "Vous avez choisi l'option 2"
IF Choix%=3 THEN PRINT "Vous avez choisi l'option 3"
END
Si l'utilisateur choisit 1,
le code associé avec le choix 1 est lancé. À la fin, le
BASIC s'en va contrôler si
Choix% est égal à 2 ou 3, même s'il est évident que ce n'est pas possible.
Ceci n'est pas très efficace et, si chacune des options s'agrandit en plusieurs lignes de code, la trace des
IF peut être
facilement perdue. C'est là qu'entre en scène le grand frère de
IF :
CASE.
Nous allons réécrire le programme en nous servant de
CASE :
REM Système de Menu simple
CLS
PRINT "Taper 1 pour l'option 1"
PRINT "Taper 2 pour l'option 2"
PRINT "Taper 3 pour l'option 3"
INPUT "Entrez votre choix : " Choix%
CASE Choix% OF
WHEN 1: PRINT "Vous avez choisi l'option 1"
WHEN 2: PRINT "Vous avez choisi l'option 2"
WHEN 3: PRINT "Vous avez choisi l'option 3"
ENDCASE
END
Je suis certain que vous voyez ce qui se passe ici. La ligne
CASE
dit au
BASIC qu'elle utilise
Choix% comme variable de comparaison. Chaque ligne
WHEN
donne une valeur pour faire la comparaison. Lorsqu'une correspondance est trouvée, le code associé
est exécuté jusqu'au
WHEN suivant. Le
BASIC saute alors vers l'instruction
ENDCASE et continue
le reste du programme, en ignorant tous les autres
WHEN.
Comme pour
ENDIF,
ENDCASE est toujours
écrit en un seul mot.
WHEN
peut prendre tout un éventail de valeurs ; modifiez l'instruction
CASE pour ajouter :
CASE Choix% OF
WHEN 1: PRINT " Vous avez choisi l'option 1"
WHEN 2: PRINT " Vous avez choisi l'option 2"
WHEN 3: PRINT " Vous avez choisi l'option 3"
WHEN 4,5,6: PRINT "Option non installée."
ENDCASE
CASE
est tout aussi capable de tester des chaînes de caractères :
REM Quiz de géographie
PRINT "Quelle est la capitale de la France :"
PRINT "a) Paris"
PRINT "b) Londres"
PRINT "c) Madrid"
INPUT "Entrez a,b ou c: " Reponse$
CASE Reponse$ OF
WHEN "A", "a": PRINT "Correct"
WHEN "B", "b": PRINT "Non, c'est le Royaume-Uni"
WHEN "C", "c": PRINT "Non, c'est l'Espagne"
ENDCASE
END
Si aucun
WHEN
n'est exécuté, nous pouvons intercepter ce fait et en faire quelque chose. Le mot-clé
OTHERWISE doit être le dernier cas avant
ENDCASE
et n'a pas de condition.
REM Quiz de géographie
PRINT "Quelle est la capitale de la France :"
PRINT "a) Paris"
PRINT "b) Londres"
PRINT "c) Madrid"
INPUT "Entrez a,b ou c: " Reponse$
CASE Reponse$ OF
WHEN "A", "a": PRINT "Correct"
WHEN "B", "b": PRINT "Non, c'est le Royaume-Uni"
WHEN "C", "c": PRINT "Non, c'est l'Espagne"
OTHERWISE: PRINT "Désolé, réponse invalide"
ENDCASE
END
Comme cela a été dit, c'est facultatif. Chaque
WHEN
pourrait avoir – et aura souvent – plus d'une ligne de code. Si les tests dans les
WHEN
se recouvrent ou sont identiques, le premier est exécuté et le second ignoré.
C'est à peu près tout ce qu'on peut dire de
CASE,
très utile, surtout quand on traitera des sous-routines, plus tard.
Un mot d'avertissement final, cependant :
ne soyez pas tenté de mettre un commentaire
(REM) après le
OF,
sinon l'ensemble ne pourra pas fonctionner et vous vous prendrez la tête à deux mains pour comprendre pourquoi.
Exercice
10.1
Recréez un programme de décision pour chef de service. Générez un nombre aléatoire de 1 à 6
et affichez un message en fonction du résultat :
1 – Embaucher un béni-oui-oui
2 – Licencier quelqu'un
3 – Déléguer vos pouvoirs
4 – Annuler toutes les heures supplémentaires
5 – Vous octroyer une augmentation de salaire
6 – Dévaliser le fonds de retraites
Fin du Chapitre 10
|