Héla Ben Khalfallah

Héla Ben Khalfallah

I love coding whatever the language and trying new programming tendencies. I have a special love to JS (ES6+), functional programming, React/Redux/Saga, architecture, clean code & tech-books.

Twitter : @b_k_hela

Blog: https://helabenkhalfallah.medium.com/

wm

Track : Web, JS, HTML5 & UX

Type de présentation : Tools-in-Action

JavaScript Generators — Cas pratiques d'utilisation

L'intérêt des fonctions générateurs (generators) réside dans la possibilité d'exécuter une fonction pas à pas, contrairement aux fonctions ordinaires "run-to-completion". Grâce à "yield" et "next", on peut lancer-suspendre-reprendre l'exécution d'une fonction.

Une fonction génératrice (function*) a les capacités d'être "early-complete" (retour anticipé pour annuler l'exécution) ou "early-abort" (suite à une exception).

Une fonction génératrice peut également fonctionner comme un itérateur puissant: "stream" où le calcul est effectué par partie (chunck) à la demande. La technique de "lazy evaluation" a un impact direct sur l'utilisation de la mémoire. Seules les valeurs nécessaires sont générées et calculées.

Une autre caractéristique des générateurs est l'accès unique. Les objets générateurs ne permettent pas l'accès aléatoire (comme c'est possible avec les tableaux) car les valeurs sont générées une par une. Ceci est utile pour créer une file d'attente (FIFO : premier entré, premier sorti/servi).

Enfin, les générateurs sont très utiles lorsque nous voulons écrire à partir de zéro une API comme async/wait ou une API de threading (coroutine, multitâche coopérative, fork, saga).