SELFHTML/Quickbar
JavaScript
Éléments du langage
![]() |
Boucles (while/for/do-while) |
![]() |
|
![]() |
À l'aide de boucles while vous pouvez répéter des instructions de programme jusqu'à ce que la condition formulée dans la boucle soit remplie.
<html> <head> <title>Identification de l'utilisateur</title> <script language="JavaScript"> <!-- var motpasse = "danseuretoile"; var entree = ""; var compteur = 1; while((entree != motpasse)&&(compteur <= 3)) { entree = window.prompt(compteur + ". essai: Entrez le mot de passe",""); compteur++; } if(entree != motpasse) history.back(); else document.location.href="secret.htm"; // --> </script> </head> <body> </body> </html> |
Une boucle while commence avec le mot while (while = aussi
longtemps que). Suit entre parenthèses la condition. Pour formuler une
condition, vous avez besoin d' opérateurs
de comparaison. Le contenu de la boucle sera répété jusqu'à ce que
la condition soit vraie.
En règle générale une boucle while contient plusieurs instructions à
l'intérieur de la boucle. Notez toutes ces instructions à l'intérieur de
parenthèses accolade { et } (touches Alt 123 et Alt 125), comme dans
l'exemple (voir aussi la partie traitant des blocs
d'instructions).
L'exemple ci-dessus représente une simple demande de mot de passe. L'utilisateur a trois essais pour entrer le mot de passe correct. Pour cela une boucle a été mise en place.
Veillez toujours pour de telles boucles qu'il y ait au moins une possibilité de terminer la boucle après un laps de temps raisonnable. Autrement, vous créez ce qu'on appelle une "boucle sans fin", de laquelle l'utilisateur ne peut sortir qu'en interrompant brutalement son navigateur WWW. C'est particulièrement irritant au cours de sessions en ligne sur le WWW!
Pour éviter les boucles sans fin, vous avez besoin de quelque chose qui à
un moment donné permette de sortir de la boucle. Le plus souvent est défini
à cette fin un "compteur" - dans notre exemple: la variable
compteur. Cette variable a ici une valeur de départ de 1
et sera incrémentée de 1 à chaque passage de boucle avec
l'instruction
compteur++;. Quand dans l'exemple le compteur est égal
ou supérieur à 3 la boucle est interrompue.
D'autres possibilités pour interrompre une boucle sont décrites ci-après.
![]() ![]() |
À l'aide de boucles for vous évitez le problème des boucles avec "while".
La condition d'une boucle for prévoit de prime abord un compteur et une
condition pour l'interruption.
<html><head><title>Test</title> </head><body> <script language="JavaScript"> <!-- for(i = 1; i <= 100; i++) { var x = i * i; document.write("<br>Le carré de " + i + " est " + x); } // --> </script> </body></html> |
Une boucle for commence par le mot for. Suit entre parenthèses la
condition de la boucle. Pour la boucle for entre en vigueur une syntaxe fixe. À
l'intérieur même de la condition de la boucle figurent trois instructions.
Dans la première instruction est défini et initialisé le compteur de boucles.
Dans l'exemple, un compteur i est défini et initialisé
avec la valeur 1. La deuxième condition contient la condition à partir de
laquelle la boucle se termine. Pour cela, vous avez besoin d' opérateurs
de comparaison. Dans la troisième instruction, le compteur de boucles
est modifié de telle façon qu'à un moment ou à un autre il remplira la
deuxième condition notée. Dans l'exemple, i est incrémenté
de 1 à chaque tour de boucle afin que sa valeur excède 100 à un moment quelconque
de façon à remplir la condition de la deuxième instruction.
L'exemple utilise le compteur de boucles pour rechercher à chaque tour de
boucles le carré le la valeur actuelle du compteur. Le résultat est ensuite
formaté HTML et écrit dans la fenêtre active.
Une variante spéciale de la boucle for est nommée boucle for-in.
<script language="JavaScript"> <!-- function proprieteobjet(objet, nomobjet) { var resultat = ""; for (var propriete in objet) { resultat += nomobjet+ "." + propriete + " = " + objet[propriete ] + "<br>"; } return resultat ; } // --> </script> |
Dans cet exemple la fonction proprieteobjet recherche toutes les
propriétés d'un objet
JavaScript. Les propriétés recherchées sont rassemblées par la
fonction en une chaîne de caractères formatée HTML pour être rendue à
une fonction appelante.
![]() ![]() |
La boucle do-while est une variante de la
boucle "While" normale. La différence entre les deux réside
en ce que, pour la boucle while normale la condition de la boucle est
vérifiée avant l'exécution du code, tandis que pour la
boucle do-while le code est d'abord exécuté et qu'après
seulement la condition de la boucle est vérifiée. De cette façon il vous est
possible d'imposer que les instructions de la boucle soient exécutées dans
tous les cas au moins une fois, même quand la condition de la boucle s'avère
fausse dés le départ.
une fois comme ceci: <script language="JavaScript"> <!-- var x = 10; do { document.write("<br>x * x = " + (x * x)); x = x + 1; } while(x < 10); // --> </script> <p> et une fois comme cela: <script language="JavaScript"> <!-- var x = 10; while(x < 10) { document.write("<br>x * x = " + (x * x)); x = x + 1; } // --> </script> |
Dans l'exemple deux petits passages JavaScript sont définis. Dans les deux
passages, une variable x
est définie et la valeur 10 lui est affectée. Dans le premier passage, le
carré de x (qui est incrémenté de 1 à chaque boucle) sera écrit aussi
longtemps que x est plus petit que 10. Étant donné que x a déjà au
début une valeur de 10, la condition d'interruption est remplie dés le départ.
Malgré tout, le carré de x sera sorti une une fois étant donné que la
condition de la boucle n'est vérifiée qu'après l'exécution des instructions
qui se trouvent dans la boucle.
Dans le deuxième passage Script, les mêmes conditions sont posées au départ,
cependant il a été notée une boucle while normale. Étant donné
que x n'est pas plus petit que 10 dés le départ, les instructions de la
boucle while ne seront pas exécutées une seule fois. La vérification de
la condition de la boucle qui se fait au début l'empêche.
![]() ![]() |
Les boucles sont des "facteurs critiques" dans un script. Pour certaines tâches plus compliquées, il n'est quelquefois pas simple de programmer une boucle de façon à ce qu'elle soit dans chaque cas à un moment donné interrompue. C'est pourquoi il existe des commandes complémentaires pour contrôler ce qui se passe dans une boucle.
<script language="JavaScript"> <!-- var i = 0; while (i < 6) { if (i == 3) break; i++; } alert("i = " + i); // --> </script> |
Avec break vous pouvez arrêter une boucle immédiatement. Pour cela, il vous faut noter dans le corps de la boucle une instruction if de laquelle dépend le mot break comme instruction. Dans l'exemple la boucle va s'interrompre dés que i aura comme valeur 3, bien que d'après l'instruction de la boucle i puisse atteindre la valeur 6.
<script language="JavaScript"> <!-- var i = 0; while (i < 6) { fin: if (i == 3) { alert("Et voila, car i a atteint la valeur de " + i); break fin; } i++; } // --> </script> |
Ceci est une variante particulière de break. Vous pouvez noter, avant la question (if) dont vous faites dépendre une instruction break, une étiquette. C'est un nom que vous donnez vous même suivi de deux points, dans l'exemple fin:. Derrière le mot break vous pouvez alors mentionner le nom de l'étiquette. Ainsi vous vous assurez dans l'exemple que l'instruction break se rapporte à chaque fois à la demande if dans laquelle il est demandé si i est égal à 3. Dans des cas simples comme dans l'exemple ci-dessus, c'est à vrai dire superflu. Mais conservez cette possibilité dans l'esprit au cas où il vous arriverait de programmer des demande if imbriquées dans des boucles et que vous utilisiez là aussi des instructions break. Pensez aussi que cette variante de l'instruction break fait partie de JavaScript 1.2 et qu'elle mène à des messages d'erreur pour des versions antérieures à Netscape Version 4.x et à l'Explorer Internet MS 4.x, étant donné que la syntaxe du double point pour l'étiquette n'est connu qu'à partir de ces versions.
<script language="JavaScript"> <!-- var i = 0, j = 0; while (i < 6) { i++; if (i == 3) continue; j++; } alert("i est égal à " + i + " et j est égal à " + j); // --> </script> |
Avec continue vous imposez la poursuite immédiate du prochain tour de boucle. Les autres instructions qui suivent dans la boucle ne sont pas exécutées. Dans l'exemple ci-dessus deux compteurs i et j sont incrémentés de 1 à chaque tour de boucle. Quand i est égal à 6 la boucle est interrompue. Entre temps i a aussi la valeur 3. Ce cas de figure est traité par la demande if. Quand i est égal à 3, le tour de boucle suivant est démarré aussitôt. L'instruction j++; n'est donc pas exécutée dans le tour de boucle où i a la valeur 3. Pour cette raison, i aura à la fin la valeur 6 alors que j n'aura que la valeur 5.
![]() | |
après:![]() |
![]() |
avant:![]() |
![]() |
SELFHTML/Quickbar
JavaScript
Éléments du langage
Serge François, 13405@free.fr