También tenía la misma pregunta y vine aquí. Después de leer las publicaciones y los comentarios, sentí que usar el generador en una función de flecha parece ser vago:
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
Esta es la razón por la que no implementaron el generador en relación con la función de flecha.
Pero, si fuera uno de ellos, podría haber pensado así:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Esto se siente como si tuviéramos una función asincrónica:
const asyncFunction = async () => ... // pretty cool
Porque, con la función normal, la palabra clave asíncrona existe, por lo que async () =>
es probable que la función de flecha la esté utilizando async function()
.
Pero, no hay una palabra clave como gen
o generator
y, por desgracia, la función de flecha no la está usando.
Para concluir:
Incluso si desean implementar el generador en la función de flecha, creo que necesitan repensar la sintaxis del generador en el núcleo js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
Y esto será un gran error. Por lo tanto, mantener la función de flecha fuera del generador es bastante bueno.
Siguiendo el comentario de @Bergi :
No. Se supone que las funciones de flecha son livianas (y no tienen un prototipo. Por ejemplo) y, a menudo, de una sola línea, mientras que los generadores son más o menos lo contrario.
Diré que el propósito del generador para usar es run-stop-run y, por lo tanto, no creo que debamos preocuparnos por el prototipo, esto léxico, etc.
function*
declaración (palabra clave de función seguida de un asterisco) define una función generadora".