SWITCH avec expressions |
See You Why? |
Exemple
|
Dans les deux exemples donnés dans la section précédente, le SWITCH était suivi par le nom d'une variable notée entre parenthèses.
Chaque cas (noté CASE) envisagé était l'égalité avec une valeur constante.
Cette valeur constante était notée
entre guillemets s'il s'agissait d'une variable alphanumérique,
sans guillemets s'il s'agissait d'une variable numérique.
switch (ma_variable) {
case "ananas" :
document.writeln("de Costa Rica à 1,79 €/pièce.");
break;
ou
switch(today){
case 1:
window.location="lundi.htm";
break;
Dans les deux exemples ci-dessus,
ma_variable est une variable string qui peut éventuellement prendre la valeur "ananas";
today est une variable numérique qui pourrait prendre la valeur 1;
derrière le mot-clé case, on indique différentes valeurs que pourrait prendre la variable située derrière le mot-clé switch.
En bref, pour utiliser correctement un switch, on doit comparer la variable située derrière le switch avec chacune des valeurs mentionnées dans les cas (case), comparaison qui ne peut être qu'une égalité...
Cependant, bien que la majorité des tutoriels trouvés sur le Net l'ignorent, mais la norme d'ECMAScript le permet, le CASE peut être suivi d'une expression autre qu'une valeur constante. On pourrait dès lors trouver des exemples (rares, il est vrai) d'instructions SWITCH faisant appel à des cas (de valeurs calculées) aussi divers que :
case 60*60*24:
case Math.PI: case n+1:
case a[2]:
mais pas de valeurs booléennes telles que :
case (age<18):
case (cc>=dd):
même si d'autres langages de programmation le permettent.
Cependant, si le mot clé case ne peut être suivie d'une expression booléenne reprenant la variable nommée derrière le mot-clé switch, nous allons proposer ici deux astuces permettant ce genre de comparaison... à employer avec modération, car l'instruction switch et ses case n'ont pas été conçus pour cela.
1.- faire suivre le mot-clé switch de la valeur true entre parenthèses,
puis ouvrir les accolades;
2.- noter un premier case suivi d'une expression booléenne entre parenthèses
(un expression logique, donc une comparaison qui peut être vraie ou fausse);
3.- terminer ce case par un deux-points;
4.- établir la liste des instructions à appliquer au cas où la condition est vérifiée
(ne pas oublier le point-virgule après chaque instruction);
5.- terminer le cas (case) par une instruction break qui empêchera de consulter les cas suivants si un cas a été vérifié;
6.- pour un deuxième case (ou suivant), recommencer à la ligne 2;
7.- après le dernier case, refermer les accolades.
On pourrait ainsi avoir :
switch (true)
case(age < 18):
document.write("vous êtes encore mineur");
break;
case (age < 68):
document.write("vous avez l'age de pouvoir travailler");
break;
case (age >= 68):
document.write("vous avez l'age de la pension");
}
À déconseiller et pourtant pas si idiot que ça...
une valeur true, notée après le switch... ce n'est cependant pas une variable :-( ;
derrière chaque case, une expression logique comparée à la valeur notée après le switch ;
un break qui empêche de trouver une autre valeur moins stricte mais vraie.
C'est la procédure adoptée dans l'exercice 26e... mais d'ici là, vous l'aurez oubliée.
Bien sûr, dans le respect de la logique JS, on peut toujours faire des tests consécutifs en veillant à commencer par les cas extrêmes : un IF au départ, un ou plusieurs ELSE IF par la suite et un dernier ELSE devrait convenir.
Notre script deviendrait alors:
if
(age < 18) {
document.write("vous êtes encore mineur");
} else if (age < 68) {
document.write("vous avez l'âge de pouvoir travailler");
} else {
document.write("vous avez l'âge de la pension");
}
voir suite >>>
voir suite >>>