J'avais aussi la même question et je suis venu ici. Après avoir lu les articles et les commentaires, j'ai senti que l'utilisation du générateur dans une fonction de flèche semblait vague:
const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word
C'est peut-être la principale raison pour laquelle ils n'ont pas implémenté le générateur en relation avec la fonction flèche.
Mais, si j'étais l'un d'eux, j'aurais pu penser comme ceci:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Cela ressemble à la fonction asynchrone:
const asyncFunction = async () => ... // pretty cool
Parce que, avec une fonction normale, le mot-clé async existe, donc la fonction flèche l'utilise - async () =>
semble probable async function()
.
Mais, il n'y a pas de mot-clé comme gen
ou generator
et hélas la fonction de flèche ne l'utilise pas.
De conclure:
Même s'ils souhaitent implémenter le générateur dans la fonction flèche, je pense qu'ils doivent repenser la syntaxe du générateur dans le noyau js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
Et ce sera une grosse erreur. Donc, garder la fonction de flèche hors du générateur est plutôt cool.
Suite au commentaire @Bergi :
Non. Les fonctions fléchées sont supposées être légères (et n'ont pas de .prototype par exemple) et souvent monolignes, tandis que les générateurs sont à peu près l'inverse.
Je dirai que le but du générateur à utiliser est run-stop-run et donc je ne pense pas que nous devons nous soucier du prototype, du lexical, etc.
function*
instruction (mot-clé de fonction suivi d'un astérisque) définit une fonction de générateur."