Avec Flash MX est apparu une nouvelle instruction permettant d’évaluer des expressions et de vérifier des conditions: switch()… Si vous êtes familiers avec d’autres langages de programmation comme le Javascript ou le PHP, vous aurez probablement déjà rencontré cette instruction et saurez comment vous en servir…
Dans le cas contraire, voici quelques explications:
Switch, case, default
switch() ,sert à quoi ? À pas grand-chose, ou plus exactement, à rien de neuf. En effet, même si la syntaxe est différente, switch() remplit les mêmes fonctions qu’une succession d’instructions if, else if et else…. Puisqu’un exemple vaut mieux que 10.000 mots, en voici un premier:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var nombre = Math.round(Math.random()*10); switch(nombre){ case 0: trace ("ZERO"); break; case 5: trace ("CINQ"); break; case 10: trace ("DIX"); break; default: trace ("nombre n'est pas égal à 0, 5 ou 10"); } |
En détail, cela donne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // On affecte à une variable nombre une valeur aléatoire comprise entre 0 et 10: nombre = Math.round(Math.random()*10); // On évalue nombre: switch(nombre){ // Premier CAS particulier: nombre vaut 0 case 0: // On effectue l'action prévue pour ce CAS: trace ("ZERO"); // et on sort de switch() break; // Deuxième CAS particulier: nombre vaut 5 case 5: // On effectue l'action prévue pour ce CAS: trace ("CINQ"); // et on sort de switch() break; // Troisième CAS particulier: nombre vaut 10 case 10: // On effectue l'action prévue pour ce CAS: trace ("DIX"); // et on sort de switch() break; // Dans tous les autres cas: default: //on appelle l'action définie par DEFAUT: trace ("nombre n'est pas égal à 0, 5 ou 10"); } |
J’en vois déjà qui réagissent
… Oui, on aurait pu utiliser une combinaison de if, else if et else, comme ceci par exemple:
1 2 3 4 5 6 7 8 | if (nombre==0){ trace ("ZERO"); } else if (nombre==5){ trace ("CINQ"); } else if (nombre==10){ trace ("DIX"); } else { trace ("nombre n'est pas égal à 0, 5 ou 10"); } |
Comme nous venons de le voir, outre la syntaxe, le fait d’utiliser switch ne change rien au résultat et si on faisait un test sur les vitesses d’exécution, on s’apercevrait que le code ne s’exécute pas plus rapidement…. Quel intérêt alors?
Switch permet simplement d’écrire DIFFÉREMMENT une suite de conditions, d’une manière généralement plus lisible pour le commun des mortels qu’une succession d’instructions if, else if et else….
- On définit d’abord ce qu’il faut évaluer, à l’intérieur des parenthèses suivant l’instruction switch.
- Entre les accolades de l’instruction switch on indique avec case les actions à effectuer dans les cas particuliers, c’est-à-dire quand l’expression qui suit l’instruction case est évaluée comme strictement égale (==) à l’expression qui accompagne switch entre parenthèses.
- Et toujours entre ces mêmes accolades, on indique avec default les actions à effectuer par défaut, autrement dit, à effectuer si aucun des cas particuliers définis avec case n’a été rencontré.
L’exemple ci-dessous vérifie ainsi si la dernière touche pressée est une flèche, et indique de quelle flèche il s’agit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // On indique à _root "d'écouter" les évènements du clavier // (voir tuto sur les listeners pour plus d'infos): Key.addListener(_root); // Puisque _root est maintenant sensible aux évènements du clavier, // on peut définir la fonction à exécuter quand on relâche une touche: _root.onKeyUp = function(){ // On va évaluer la dernière touche pressée: switch(Key.getCode()){ case 37: trace("FLECHE GAUCHE"); break; case 38: trace("FLECHE HAUT"); break; case 39: trace("FLECHE DROITE"); break; case 40: trace ("FLECHE BAS"); break; default: trace ("PAS UNE FLECHE"); } } |
Voilà… switch() n’a rien de mystérieux ni de miraculeux, mais c’est une instruction qui peut quand même vous être utile en remplacement ou en accompagnement de conditions complexes réalisées à l’aide de if, else if et else…