Condition à plusieurs valeurs (instruction case)

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)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *