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 SELECTS’é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
CASEvide 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.0correspond àCASE 2, car c'est le même nombre. ENDCASEest facultatif : leCASEsuivant ferme aussi la branche.CASE DEFAULTvient une seule fois, en dernier : unCASEaprès lui est une erreur de compilation.CASE 1 TO 5,CASE IS > 5etCASE ELSEn'existent pas. Ils compilent, puis arrêtent le programme sur une erreur. UnDEFAULTseul n'est pas non plus une branche : ses lignes atterrissent dans le CASE du dessus. Utilisez une chaîneIF … ELSEIFpour les plages, etCASE DEFAULTpour le reste.- N'écrivez pas de comparaison dans un CASE :
CASE x = 7range 7 dansxau lieu de comparer. L'astuceSELECT TRUEd'autres dialectes ne marche pas. EXITetCONTINUEdans 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 ENDSELECTNEXTDans le manuel : Contrôle du flux