Syntaxe

Compare une valeur à une liste de valeurs CASE et exécute la branche de la première qui correspond. CASE DEFAULT s'exécute quand aucune ne correspond.

SELECT [CASE] <expression>
  CASE <value> [, <value>…]
    <statements>
  [ENDCASE | END CASE]
  …
  [CASE DEFAULT | DEFAULT CASE
    <statements>]
ENDSELECT
END SELECT

S’écrit aussi : CASE, CASE DEFAULT, DEFAULT, ENDCASE, ENDSELECT

Les éléments

<expression>La valeur à tester, lue une seule fois. Un nombre, une chaîne ou n'importe quelle expression.
<value>Une valeur à comparer : un littéral, une variable ou une expression comme 2 * 2. Plusieurs valeurs séparées par des virgules partagent une branche. Elles sont essayées dans l'ordre.
<statements>Les lignes d'une branche.

À savoir

  • Une seule branche s'exécute. Il n'y a pas de passage à la suivante : un CASE vide ne fait rien et n'exécute pas le suivant. Pour partager un corps, listez les valeurs : CASE 2, 3.
  • La comparaison est une égalité stricte : la chaîne "5" ne correspond pas à CASE 5. 2.0 correspond à CASE 2, car c'est le même nombre.
  • ENDCASE est facultatif : le CASE suivant ferme aussi la branche. CASE DEFAULT vient une seule fois, en dernier : un CASE après lui est une erreur de compilation.
  • CASE 1 TO 5, CASE IS > 5 et CASE ELSE n'existent pas. Ils compilent, puis arrêtent le programme sur une erreur. Un DEFAULT seul n'est pas non plus une branche : ses lignes atterrissent dans le CASE du dessus. Utilisez une chaîne IF … ELSEIF pour les plages, et CASE DEFAULT pour le reste.
  • N'écrivez pas de comparaison dans un CASE : CASE x = 7 range 7 dans x au lieu de comparer. L'astuce SELECT TRUE d'autres dialectes ne marche pas.
  • EXIT et CONTINUE dans un SELECT agissent sur la boucle qui l'entoure, pas sur le SELECT. Hors de toute boucle, ce sont des erreurs de compilation.

Exemple

FOR weapon = 1 TO 4  SELECT weapon    CASE 1      Console("sword")   ' sword    CASE 2, 3      Console("bow")     ' bow, bow    CASE DEFAULT      Console("fists")   ' fists  ENDSELECTNEXT
Dans le manuel : Contrôle du flux