Aller au contenu

Fonctions générateurs JavaScript

Les générateurs JavaScript sont une fonctionnalité puissante du langage, permettant aux développeurs d'écrire un code asynchrone plus efficace. Ils offrent un moyen de suspendre l'exécution d'une fonction et de la reprendre à volonté, ce qui les rend particulièrement utiles pour gérer le flux dans les applications. Dans ce guide, nous explorons l'univers des générateurs JavaScript, en examinant leur syntaxe, leurs cas d'utilisation et des techniques avancées pour améliorer vos compétences en programmation.

Comprendre les fonctions générateurs

Les bases des fonctions générateurs

Une fonction générateur est déclarée de manière similaire à une fonction classique, mais utilise la syntaxe function*. L'astérisque (*) indique que la fonction est un générateur. Voici un exemple simple de fonction générateur :


javascript
function* simpleGenerator() {
}

Lorsqu'elle est appelée, une fonction générateur n'exécute pas son code. Au lieu de cela, elle retourne un type spécial d'itérateur, appelé générateur. Vous pouvez contrôler cet itérateur pour exécuter des segments du code de la fonction générateur :


Output appears here after Run.

Vous pouvez également consommer un générateur directement à l'aide d'une boucle for...of, qui gère automatiquement l'itération et s'arrête lorsque done est true :

javascript
for (const value of simpleGenerator()) {
  console.log(value);
}

Contrôler le flux d'exécution

Les générateurs sont particulièrement utiles pour contrôler le flux d'exécution. Vous pouvez suspendre l'exécution de la fonction à chaque yield et la reprendre de l'extérieur. Ils conservent leur état, c'est-à-dire les variables et leurs valeurs, entre les réentrées. Vous pouvez également terminer un générateur prématurément avec return() ou injecter des erreurs via throw() pour gérer les exceptions à l'intérieur du générateur.

Modèles avancés de générateurs

Utilisation de yield*

Dans des scénarios complexes, vous pourriez vouloir déléguer une partie du contrôle du générateur à un autre générateur. C'est là qu'intervient yield*. Il permet à un générateur de retourner les valeurs d'un autre générateur, d'un objet itérable ou d'un tableau.


Output appears here after Run.

Envoi de valeurs dans les générateurs

Les générateurs peuvent non seulement retourner des valeurs, mais aussi les recevoir via la méthode next(). Cela les rend interactifs et permet à l'entrée externe d'affecter leur comportement.


Output appears here after Run.

Applications pratiques des générateurs JavaScript

Gestion des opérations asynchrones

Les générateurs peuvent simplifier la gestion des opérations asynchrones en évitant le scénario du « callback hell » (enfer des callbacks). Combinés aux Promesses, ils permettent d'écrire un code asynchrone à la fois facile à écrire et à lire.


Output appears here after Run.

Remarque : Il s'agit d'un exécuteur manuel simplifié. En production, vous utiliseriez généralement async/await ou une bibliothèque comme co pour automatiser l'itération.

Implémentation de boucles infinies

Les générateurs sont excellents pour implémenter des boucles infinies qui sont à la fois efficaces et faciles à contrôler, ce qui peut être utile dans des scénarios tels que le développement de jeux ou les simulations.


Output appears here after Run.

Conclusion

Les générateurs JavaScript offrent un ensemble robuste d'outils pour gérer le flux d'exécution, traiter le code asynchrone et contrôler une logique complexe. En comprenant et en utilisant les générateurs, les développeurs peuvent écrire un code JavaScript plus propre et plus efficace. Que vous gériez des appels API, traitiez des interactions utilisateur ou ayez simplement besoin d'une méthode propre pour gérer des intervalles, les générateurs offrent une solution puissante pour améliorer vos projets JavaScript.

Pratique

Quelle est la fonction du caractère '*' placé avant le mot-clé function dans les générateurs JavaScript ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.