Aller au contenu principal
Publié le

Itérateurs et Générateurs en JavaScript

Partager :

Introduction

Les itérateurs et les générateurs sont des concepts puissants en JavaScript qui permettent aux développeurs de travailler avec des séquences de données de manière plus contrôlée et efficace. Cet article explique comment fonctionnent les itérateurs et les générateurs, avec des exemples pratiques et des conseils pour les appliquer dans différentes situations.

Que sont les Itérateurs ?

Un itérateur est un objet qui permet de parcourir une collection de données, élément par élément. En JavaScript, un itérateur est un objet qui implémente la méthode next(), laquelle retourne un objet avec deux propriétés : value et done.

Créer un Itérateur Simple

function creerIterateur(array) {
  let indexSuivant = 0;

  return {
    next: function () {
      return indexSuivant < array.length
        ? { value: array[indexSuivant++], done: false }
        : { done: true };
    },
  };
}

let monIterateur = creerIterateur([1, 2, 3]);
console.log(monIterateur.next().value); // 1
console.log(monIterateur.next().value); // 2
console.log(monIterateur.next().value); // 3
console.log(monIterateur.next().done); // true

Que sont les Générateurs ?

Les générateurs sont des fonctions spéciales en JavaScript qui simplifient la création d'itérateurs. Ils sont déclarés avec le mot-clé function* et utilisent yield pour retourner des valeurs de manière séquentielle.

Exemple de Générateur

function* generateurNumeros() {
  yield 1;
  yield 2;
  yield 3;
}

let monGenerateur = generateurNumeros();
console.log(monGenerateur.next().value); // 1
console.log(monGenerateur.next().value); // 2
console.log(monGenerateur.next().value); // 3

Utiliser les Générateurs pour des Itérations Complexes

Les générateurs sont particulièrement utiles pour définir des logiques d'itération personnalisées, y compris celles qui seraient difficiles ou impossibles à réaliser avec les structures d'itération traditionnelles.

Générateurs avec État

Les générateurs peuvent maintenir un état interne entre les appels à yield.

function* generateurID() {
  let id = 1;

  while (true) {
    yield id++;
  }
}

let createurID = generateurID();
console.log(createurID.next().value); // 1
console.log(createurID.next().value); // 2

Itérateurs vs. Générateurs

Bien que les deux soient utilisés pour l'itération, les générateurs offrent une façon plus expressive et concise de définir des logiques itératives, en particulier pour les séquences complexes ou infinies.

Comparaison et Utilisation

  • Itérateurs : Plus de contrôle manuel, adaptés aux itérations qui ne correspondent pas au pattern du générateur.
  • Générateurs : Plus simples et directs, idéaux pour les logiques itératives complexes ou personnalisées.

Bonnes Pratiques et Conseils

  1. Utilisez les Générateurs pour les Séquences Complexes : Profitez de la simplicité des générateurs pour produire des séquences complexes ou infinies.
  2. Gestion de l'État : Utilisez les générateurs pour maintenir l'état dans les itérations, en évitant les variables globales ou externes.
  3. Attention aux Itérations Infinies : Dans les générateurs qui produisent des séquences infinies, assurez-vous qu'il existe une condition de sortie dans leur utilisation pour éviter les boucles infinies.

Conclusion

Les itérateurs et les générateurs offrent des moyens puissants et flexibles pour gérer l'itération des données en JavaScript. Comprendre comment les utiliser peut simplifier considérablement la mise en œuvre de logiques itératives complexes et améliorer la lisibilité et l'efficacité de votre code.

Happy coding!