14.3 Blocs et étiquettes |
See You Why? |
Avec un peu de JavaScript, n'oubliez pas de rendre vos pages plus dynamiques et plus interactives. |
MERCI |
voir suite >>>
Beaucoup de tutoriels JS ne parlent pas des blocs et des étiquettes y faisant référence. D'autres se contentent d'affirmer "Les étiquettes ne sont pas très couramment utilisées dans JavaScript, car elles rendent les programmes difficiles à lire et à comprendre".
J'en ai rencontré plusieurs qui acceptent leur utilisation, mais uniquement dans des boucles (voir 'boucle FOR' au chapitre 19, 'boucle WHILE' au chapitre 20) ou avec l'instruction SWITCH vue au chapitre 18.
Même si nous ne faisons pas fréquemment usage des blocs étiquetés, nous ne partageons cependant ce rejet systématique de l'usage des blocs étiquetés. Nous ne multiplierons pas ici les exemples d'utilisation de cette technique, mais à différentes reprises dans nos chapitres suivants, nous illustrerons le bon usage que l'on peut en faire.
Le lecteur se rappellera ce que nous avons dit à propos des instructions.
Il aura vu que plusieurs instructions pouvaient se suivre et sont alors exécutées suivant l'ordre de lecture du programme.
Dans le chapitre 6 et les suivants, relatif aux fonctions, il aura découvert l'usage des accolades { et } qui encadrent un bloc d'instructions lors de la création ou définition d'une fonction et qui sera exécuté lorsque la fonction sera appelée.
Cet usage des accolades encadrant un bloc d'instructions vient d'être utilisé à nouveau pour créer un bloc d'instructions à exécuter uniquement si la condition spécifiée dans le IF a une valeur booléenne 'vrai' ou 'true'.
Le lecteur s'habituera rapidement à cette construction de blocs d'instructions encadrés par des accolades, très fréquentes en JS :
* lors de conditions IF imbriquées (chap.16) ;
* lors de l'instruction SWITCH (chap.18) en cas de tests multiples selon la valeur d'une variable ;
* lors de la construction de boucle FOR (chap.19) ;
* lors de la construction de boucle WHILE (chap.20) ;
* lors de la création d'objets (chap.24), etc.
La syntaxe de création d'un bloc étiqueté est la suivante :
etiquette1: {
instruction1;
fonction2();
// toute autre instruction
}
Il faut donc :
Un exemple ci-après.
Voici un bon bloc à placer au début d'un programme : toutes les variables utilisées dans le corps du programme y seront déclarées et la programmation pour résoudre des équations du second degré pourra suivre.
etDeclarationVariable: {
var a=12, b=20, c=-5;
var rho;
var rac_rho;
// toute autre instruction
}
Les esprits critiques se diront qu'il est aussi facile d'employer des commentaires... ce qui n'est pas inexact.
Il est même possible d'arrêter l'exécution de la source à l'intérieur d'un bloc étiqueté. Imaginons que vous souhaitiez interrompre une partie d'un bloc (pour modification de votre programme), il est possible d'arrêter son exécution en utilisant l'instruction break suivi du nom de l'étiquette. On pourrait écrire :
etDeclarationVariables: {
var a=12, b=20, c=-5;
var rho;
break etDeclarationVariables;
var rac_rho;
// toute autre instruction
}
Ce qui signifie que pour l'instant, vous ne comptez pas travailler avec la variable rac_rho (racine carrée du réalisant ou discriminant) car elle demande des précautions particulières...
Ici aussi, certains se diront qu'il est aussi facile d'employer des commentaires... ce qui n'est pas inexact.
La lecture du chapitre suivant va nous montrer que JS a créé une instruction qui permette de considérer non seulement ce qu'il faut faire quand une condition est vérifiée (c'est le but de ce chapitre), mais aussi ce qu'il faut faire dans le cas contraire (c'est l'objet du chapitre suivant, le ELSE).
Sans la connaissance du ELSE et sans la maitrise de tous les opérateurs, il est possible de programmer un SI... ALORS... SINON... en utilisant la technique du bloc étiqueté.
La preuve :
var rep1, rep2;
rep1 = prompt("Entrer un nombre entier de maximum 2 chiffres");
rep2 = prompt("Entrer un 2e nombre entier [max 2 chiffres]");
etiqu: {
if (rep1 == rep2*2) {
alert(rep1+" est le double de "+rep2+".");
break etiqu;
}
alert(rep1+" n'est pas le double de "+rep2+ ".");
}
voir suite >>>
voir suite >>>