Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Guide JavaScript
  4. Boucles et itérations

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

Boucles et itérations

Les boucles permettent de répéter des actions simplement et rapidement. Ce chapitre duguide JavaScript présente les différentes instructions qu'il est possible d'utiliser en JavaScript pour effectuer des itérations.

Les boucles permettent de répéter des actions simplement et rapidement. Une boucle peut être vue comme une version informatique de « copier N lignes » ou de « faire X fois quelque chose ». Par exemple, en JavaScript, on pourrait traduire « Faire 5 pas vers l'est » avec cette boucle :

js
for (let pas = 0; pas < 5; pas++) {  // Ceci sera exécuté 5 fois  // À chaque éxécution, la variable "pas" augmentera de 1  // Lorsque'elle sera arrivée à 5, le boucle se terminera.  console.log("Faire " + pas + " pas vers l'est");}

Il y a différents types de boucles mais elles se ressemblent toutes au sens où elles répètent une action un certain nombre de fois (ce nombre peut éventuellement être zéro). Les différents types de boucles permettent d'utiliser différentes façon de commencer et de terminer une boucle. Chaque type de boucle pourra être utilisé en fonction de la situation et du problème que l'on cherche à résoudre.

Voici les différentes boucles fournies par JavaScript :

L'instruction for

Une bouclefor répète des instructions jusqu'à ce qu'une condition donnée ne soit plus vérifiée. La bouclefor JavaScript ressemble beaucoup à celle utilisée en C ou en Java. Une bouclefor s'utilise de la façon suivante :

for ([expressionInitiale]; [condition]; [expressionIncrément])  instruction

Voici ce qui se passe quand une bouclefor s'exécute :

  1. L'expression initialeexpressionInitiale est exécutée si elle est présente. Généralement, on utilise cette expression pour initialiser un ou plusieurs compteurs dont on se servira dans la boucle. Il est possible d'utiliser des expressions plus complexes si besoin. Elle peut servir à déclarer des variables.
  2. L'expressioncondition est évaluée, si elle vauttrue, les instructions contenues dans la boucle sont exécutées. Si la valeur decondition estfalse, la bouclefor se termine. Si la condition est absente, elle est considérée commetrue.
  3. L'instructioninstruction est exécutée. Si l'on souhaite exécuter plusieurs instructions, on utilisera un bloc d'instructions ({ ... }) afin de les grouper.
  4. Si elle est présente, l'expression de mise à jourexpressionIncrément est exécutée.
  5. On retourne ensuite à l'étape 2.

Exemple

La fonction suivante contient une instructionfor qui compte le nombre d'options sélectionnées dans une liste déroulante (ici, un objet<select> permettant une sélection multiple). L'instructionfor déclare une variablei et l'initialise à zéro. Elle vérifie quei est bien inférieur au nombre d'options et, pour chaque option, effectue un test conditionnel pour savoir si l'option est sélectionnée puis passe à l'option suivante en incrémentant la variablei pour chaque itération.

html
<form name="selectForm">  <p>    <label for="typesMusique"      >Veuillez choisir des genres musicaux, puis cliquez :</label    >    <select name="typesMusique" multiple="multiple">      <option selected="selected">R&B</option>      <option>Jazz</option>      <option>Blues</option>      <option>New Age</option>      <option>Classique</option>      <option>Opera</option>    </select>  </p>  <p><button type="button">Combien sont sélectionnés ?</button></p></form><script>  function quantité(selectObject) {    let qtéSélectionnée = 0;    for (let i = 0; i < selectObject.options.length; i++) {      if (selectObject.options[i].selected) {        qtéSélectionnée++;      }    }    return qtéSélectionnée;  }  let btn = document.getElementById("btn");  btn.addEventListener("click", function () {    alert(      "Nombre d'options choisies : " +        quantité(document.selectForm.typesMusique),    );  });</script>

L'instructiondo...while

L'instructiondo...while permet de répéter un ensemble d'instructions jusqu'à ce qu'une condition donnée ne soit plus vérifiée. (NdT : littéralement « do...while » signifie « faire... tant que »). Une instructiondo...while s'utilise de la façon suivante :

do  instructionwhile (condition);

instruction est exécutée au moins une fois avant que la condition soit vérifiée. Pour utiliser plusieurs instructions à cet endroit, on utilisera une instruction de bloc ({ ... }) pour regrouper différentes instructions. Si lacondition est vérifiée, l'instruction est à nouveau exécutée. À la fin de chaque exécution, la condition est vérifiée. Quand la condition n'est plus vérifiée (vautfalse ou une valeur équivalente), l'exécution de l'instructiondo…while est stoppée et le contrôle passe à l'instruction suivante.

Exemple

Dans l'exemple qui suit, la boucledo est exécutée au moins une fois et répétée jusqu'à ce quei ne soit plus inférieur à 5.

js
let i = 0;do {  i += 1;  console.log(i);} while (i < 5);

L'instructionwhile

Une instructionwhile permet d'exécuter une instruction tant qu'une condition donnée est vérifiée. Cette instructionwhile s'utilise de la façon suivante :

while (condition)  instruction

Si la condition n'est pas vérifiée, l'instructioninstruction n'est pas exécutée et le contrôle passe directement à l'instruction suivant la boucle.

Le test de la condition s'effectue avant d'exécuterinstruction. Si la condition renvoietrue (ou une valeur équivalente),instruction sera exécutée et la condition sera testée à nouveau. Si la condition renvoiefalse (ou une valeur équivalente), l'exécution s'arrête et le contrôle est passé à l'instruction qui suitwhile.

Pour pouvoir utiliser plusieurs instructions dans la boucle, on utilisera une instruction de bloc ({ ... }) afin de les regrouper.

Exemple 1

La bouclewhile qui suit permet d'effectuer des itérations tant quen est inférieur à 3 :

js
let n = 0;let x = 0;while (n < 3) {  n++;  x += n;}

À chaque itération, la boucle incrémenten et ajoute la valeur den àx.x etn prendront ainsi les valeurs suivantes :

  • Après la première itération :n = 1 etx = 1
  • Après la deuxième itération :n = 2 etx = 3
  • Après la troisième itération :n = 3 etx = 6

Une fois la troisième itération effectuée, la conditionn < 3 n'est plus vérifiée, par conséquent, la boucle se termine.

Exemple 2

Attention à éviter les boucles infinies. Il faut bien s'assurer que la condition utilisée dans la boucle ne soit plus vérifiée à un moment donné. Si la condition est toujours vérifiée, la boucle se répétera sans jamais s'arrêter. Dans l'exemple qui suit, les instructions contenues dans la bouclewhile s'exécutent sans discontinuer car la condition est toujours vérifiée :

js
while (true) {  console.log("Coucou monde !");}

L'instructionlabel

Unlabel (ou étiquette) permet de fournir un identifiant pour une instruction afin d'y faire référence depuis un autre endroit dans le programme. On peut ainsi identifier une boucle grâce à un label puis utiliser les instructionsbreak oucontinue pour indiquer si le programme doit interrompre ou poursuivre l'exécution de cette boucle.

On utilise un label de la façon suivante :

label:  instruction

La valeur delabel peut être n'importe quel identifiant JavaScript valide (et ne doit pas être un mot réservé pour le langage). L'instruction peut être n'importe quelle instruction JavaScript valide (y compris un bloc).

Exemple

Dans cet exemple, on utilise un labelmemoBoucle pour identifier une bouclewhile.

js
memoBoucle: while (memo == true) {  faireQQC();}

Note :Pour plus de détails sur cette instruction, voir la page de la référence JavaScript pourlabel.

L'instructionbreak

L'instructionbreak est utilisée pour finir l'exécution d'une boucle, d'une instructionswitch, ou avec un label.

  • Lorsquebreak est utilisé sans label, il provoque la fin de l'instructionwhile,do-while,for, ouswitch dans laquelle il est inscrit (on finit l'instruction la plus imbriquée), le contrôle est ensuite passé à l'instruction suivante.
  • Lorsquebreak est utilisé avec un label, il provoque la fin de l'instruction correspondante.

La syntaxe de cette instruction possède donc deux formes :

  1. break;
  2. break label;

La première forme permet d'interrompre la boucle la plus imbriquée (ou leswitch) dans laquelle on se trouve. La seconde forme interrompt l'exécution d'une instruction identifiée par un label.

Exemple 1

Dans l'exemple qui suit, on itère sur un tableau grâce à une boucle jusqu'à trouver un élément dont la valeur estvaleurTest :

js
for (i = 0; i < a.length; i++) {  if (a[i] === valeurTest) {    break;  }}

Exemple 2

Ici, on utilisebreak des deux façons : avec une instruction représentée par un label et sans.

js
let x = 0;let z = 0;labelAnnuleBoucle: while (true) {  console.log("Boucle externe : " + x);  x += 1;  z = 1;  while (true) {    console.log("Boucle interne : " + z);    z += 1;    if (z === 10 && x === 10) {      break labelAnnuleBoucle;    } else if (z === 10) {      break;    }  }}

L'instructioncontinue

L'instructioncontinue permet de reprendre une bouclewhile,do-while,for, ou une instructionlabel.

  • Lorsquecontinue est utilisé sans label, l'itération courante de la boucle (celle la plus imbriquée) est terminée et la boucle passe à l'exécution de la prochaine itération. À la différence de l'instructionbreak,continue ne stoppe pas entièrement l'exécution de la boucle. Si elle est utilisée dans une bouclewhile, l'itération reprend au niveau de la condition d'arrêt. Dans une bouclefor, l'itération reprend au niveau de l'expression d'incrément pour la boucle.
  • Lorsquecontinue est utilisé avec un label, il est appliqué à l'instruction de boucle correspondante.

L'instructioncontinue s'utilise donc de la façon suivante :

  1. continue;
  2. continuelabel;

Exemple 1

Dans l'exemple qui suit, on utilise une bouclewhile avec une instructioncontinue qui est exécutée lorsquei vaut 3. Ici,n prendra donc les valeurs 1, 3, 7 et 12.

js
let i = 0;let n = 0;while (i < 5) {  i++;  if (i === 3) {    continue;  }  n += i;  console.log(n);}// 1, 3, 7, 12

Exemple 2

Dans l'exemple suivant, on a une instruction étiquetéevérifIetJ qui contient une autre instruction étiquetéevérifJ. Si l'instructioncontinue est utilisée, le programme reprend l'exécution au début de l'instructionvérifJ. Chaque fois quecontinue est utilisé,vérifJ réitère jusqu'à ce que sa condition renvoiefalse. Lorsque c'est le cas, le reste de l'instructionvérifIetJ est exécuté.

Sicontinue utilisait l'étiquettevérifIetJ, le programme continuerait au début de l'instructionvérifIetJ

js
let i = 0;let j = 8;vérifIetJ: while (i < 4) {  console.log("i : " + i);  i += 1;  vérifJ: while (j > 4) {    console.log("j : " + j);    j -= 1;    if (j % 2 === 0) {      continue vérifJ;    }    console.log(j + " est impaire.");  }  console.log("i = " + i);  console.log("j = " + j);}

L'instructionfor...in

L'instructionfor...in permet d'itérer sur l'ensemble des propriétés énumérables d'un objet. Pour chaque propriété, JavaScript exécutera l'instruction indiquée. Cette instruction s'utilise de la façon suivante :

for (variable in objet) {  instruction}

Exemple

La fonction suivante prend comme argument un objet et le nom de cet objet. Elle parcourt ensuite les propriétés de l'objet et renvoie une chaîne de caractères qui liste les propriétés avec leurs noms et leurs valeurs respectives :

js
function afficherProps(obj, nomObj) {  var result = "";  for (var i in obj) {    result += nomObj + "." + i + " = " + obj[i] + "\n";  }  result += "\n";  return result;}

Pour un objetvoiture dont les propriétés sontfabricant etmodèle,result serait :

js
voiture.fabricant = Ford;voiture.modèle = Mustang;

Les tableaux (arrays) etfor...in

Bien qu'il soit tentant d'utiliser cette instruction pour parcourir les éléments d'un objetArray , cela peut avoir des comportements inattendus. En effet,for...in permet de parcourir les propriétés définies par l'utilisateur ainsi que les éléments de tableau. Ainsi, si l'on modifie un objetArray en lui ajoutant des propriétés et/ou des méthodes, la bouclefor...in renverra le nom de ces nouvelles propriétés en plus des indices des éléments du tableau. C'est pourquoi, il est préférable d'utiliser une bouclefor avec les indices du tableau pour parcourir ses éléments.

L'instructionfor...of

L'instructionfor...of crée une boucle qui fonctionne avecles objets itérables (qui incluentArray,Map,Set, l'objetarguments, etc.). La boucle appelle un mécanisme d'itération propre à l'objet utilisé et elle parcourt l'objet et les valeurs de ses différentes propriétés.

for (variable of objet) {  instruction}

Dans l'exemple suivant, on illustre la différence entre une bouclefor...of et une bouclefor...in.for...in parcourt les noms des propriétés d'un objet alors quefor...of parcourt lesvaleurs des propriétés :

js
let arr = [3, 5, 7];arr.toto = "coucou";for (let i in arr) {  console.log(i); // affiche 0, 1, 2, "toto" dans la console}for (let i of arr) {  console.log(i); // affiche 3, 5, 7 dans la console}

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp