Skip to content

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].