Les questions sont:
- Les générateurs cassent-ils le paradigme de programmation fonctionnelle? Pourquoi ou pourquoi pas?
- Si oui, les générateurs peuvent-ils être utilisés dans la programmation fonctionnelle et comment?
Considérer ce qui suit:
function * downCounter(maxValue) {
yield maxValue;
yield * downCounter(maxValue > 0 ? maxValue - 1 : 0);
}
let counter = downCounter(26);
counter.next().value; // 26
counter.next().value; // 25
// ...etc
La downCounter
méthode semble apatride. De plus, un appel downCounter
avec la même entrée entraînera toujours la même sortie. Cependant, en même temps, l'appel next()
ne produit pas de résultats cohérents.
Je ne sais pas si les générateurs cassent ou non le paradigme de programmation fonctionnelle, car dans cet exemple, il counter
s'agit d'un objet générateur et donc l'appel next()
produirait les mêmes résultats qu'un autre objet générateur créé avec exactement la même chose maxValue
.
De plus, l'appel someCollection[3]
à un tableau retournerait toujours le quatrième élément. De même, appeler next()
quatre fois sur un objet générateur renvoie également toujours le quatrième élément.
Pour plus de contexte, ces questions ont été posées lors du travail sur un kata de programmation . La personne qui a répondu à la question a soulevé la question de savoir si les générateurs pouvaient ou non être utilisés dans la programmation fonctionnelle et s'ils possédaient ou non l'état.