Generadores en JavaScript
Aquí tienes una documentación sobre los generadores en JavaScript, incluyendo información sobre el operador yield y ejemplos:
Introducción a los generadores en JavaScript
Los generadores son una característica introducida en ECMAScript 2015 que permiten crear funciones que pueden pausarse y reanudarse. Una función generadora se define con la palabra clave function* y produce un objeto iterable llamado Generator [1].
Definición de una función generadora
Una función generadora se declara con la palabra clave function* seguida del nombre de la función:
function* generatorFunction() {}Los generadores pueden ser métodos de objetos o clases [1].
Ejemplo básico de generador
function* generatorFunction() { yield "Neo"; yield "Morpheus"; yield "Trinity"; return "The Oracle";}
const generator = generatorFunction();
console.log(generator.next()); // {value: "Neo", done: false}console.log(generator.next()); // {value: "Morpheus", done: false}console.log(generator.next()); // {value: "Trinity", done: false}console.log(generator.next()); // {value: "The Oracle", done: true}El operador yield
El operador yield permite pausar la ejecución de un generador y producir valores. Cada vez que se encuentra un yield, el generador se detiene y devuelve el valor [1].
Iteración de un generador
Los generadores pueden iterarse usando el método next() o con bucles como for...of [1].
const generator = generatorFunction();
for (const value of generator) { console.log(value);}Generadores infinitos
Los generadores pueden manejar flujos de datos infinitos usando bucles infinitos [1].
function* incrementer() { let i = 0; while (true) { yield i++; }}
const counter = incrementer();console.log(counter.next()); // {value: 0, done: false}console.log(counter.next()); // {value: 1, done: false}console.log(counter.next()); // {value: 2, done: false}console.log(counter.next()); // {value: 3, done: false}Pasar valores a un generador
Se pueden pasar valores a un generador usando el método next() con un argumento [1].
function* generatorFunction(value) { yield value * 10;}
const generator = generatorFunction(5);console.log(generator.next()); // {value: 50, done: false}console.log(generator.next(10)); // {value: 100, done: false}Conclusión
Los generadores proporcionan una forma poderosa y flexible de trabajar con flujos de datos en JavaScript. Permiten manejar conjuntos de datos infinitos, organizar código de forma semántica y alternativas más sencillas al manejo asíncrono con promesas en algunos casos [1].