Multi-branches avec une seule expression
Si vous devez exécuter des logiques différentes selon les valeurs distinctes d’une même expression, l’instruction case .. of .. end est parfaitement adaptée.
case SomeValue of
0: DoSomething;
1: DoSomethingElse;
2: begin
IfItsTwoThenDoThis;
AndAlsoDoThis;
end;
3..10: DoSomethingInCaseItsInThisRange;
11, 21, 31: AndDoSomethingForTheseSpecialValues;
else
DoSomethingInCaseOfUnexpectedValue;
end;Langage du code : JavaScript (javascript)
La branche else est facultative ; elle correspond au mot-clé default dans l’instruction switch des langages de la famille C.
Si aucune branche ne correspond et qu’aucun else n’est écrit, aucun code ne sera exécuté.
Si vous maîtrisez les langages de type C et que vous comparez avec l’instruction switch, vous remarquerez que le case de Pascal n’a aucun passage automatique (fall-through). C’est un avantage conçu volontairement dans Pascal. Vous n’avez pas besoin d’écrire manuellement des break ; au plus une seule branche case s’exécute à chaque fois, puis on quitte immédiatement tout le bloc case.
5 syntaxes de correspondance valides
case num of
5: Writeln('Égal à 5'); // Valeur unique
1,3,5: Writeln('Correspond à 1, 3 ou 5'); // Plusieurs valeurs séparées par des virgules
10..20: Writeln('Intervalle de 10 à 20'); // Plage numérique continue
'a'..'z': Writeln('Lettres minuscules'); // Les plages de caractères sont aussi autorisées
else
Writeln('Aucune valeur correspondante');
end;Langage du code : JavaScript (javascript)
Les branches à plusieurs instructions doivent être encadrées par begin..end
case n of
2: begin
Writeln('Branche 2');
Writeln('Exécuter plusieurs lignes de code');
end;
end;Langage du code : JavaScript (javascript)
L’exemple ci-dessous accepte un nombre ASCII entre 1 et 128 et classe le caractère ASCII correspondant selon la valeur saisie.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program AsciiJudge;
// Procédure encapsulée : recevoir un code ASCII 0-128 pour le classer
procedure JudgeAsciiCode(code: Integer);
begin
case code of
// 1. Correspondance valeur unique + plusieurs lignes avec begin end (Entrée ASCII=13)
13: begin
Writeln('======== Touche Entrée spéciale ========');
Writeln('Code ASCII : 13 Caractère de contrôle retour chariot');
Writeln('=========================================');
end;
// 2. Plusieurs valeurs discrètes séparées par virgule : tous caractères de contrôle 0-12, 14-31
0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
Writeln('Type : Caractère de contrôle');
// 3. Plage de valeurs : Chiffres 0~9 ASCII 48~57
48..57: Writeln('Type : Chiffres 0-9');
// Plage : Majuscules A-Z
65..90: Writeln('Type : Lettres majuscules A-Z');
// Plage : Minuscules a-z
97..122: Writeln('Type : Lettres minuscules a-z');
// 4. Branche par défaut else + plusieurs lignes begin end (Signes et ponctuation)
else
begin
Writeln('Type : Ponctuation / Symbole');
Writeln('Code ASCII saisi : ', code);
end;
end;
end;
var
asciiNum: Integer;
begin
Write('Saisissez un nombre ASCII entre 0 et 128 : ');
ReadLn(asciiNum);
// Limiter la plage de saisie
if (asciiNum >= 0) and (asciiNum <= 128) then
JudgeAsciiCode(asciiNum)
else
Writeln('La saisie dépasse la plage 0~128, invalide !');
ReadLn;
end.Langage du code : PHP (php)
Pour en savoir plus sur les codes ASCII, consultez cet article : ASCII table – Table of ASCII codes, characters and symbols
Condition à plusieurs valeurs (instruction case)