Saltar al contenido

Funciones generadoras de JavaScript

Los generadores de JavaScript son una característica poderosa del lenguaje que permite a los desarrolladores escribir un código asíncrono más eficiente. Proporcionan una forma de pausar la ejecución de una función y reanudarla cuando se desee, lo que los hace especialmente útiles para gestionar el flujo en las aplicaciones. En esta guía, exploramos el mundo de los generadores de JavaScript, analizando su sintaxis, casos de uso y técnicas avanzadas para mejorar tus habilidades de programación.

Comprender las funciones generadoras

Los fundamentos de las funciones generadoras

Una función generadora se declara de manera similar a una función regular, pero utiliza la sintaxis function*. El asterisco (*) indica que la función es un generador. Aquí tienes un ejemplo sencillo de una función generadora:


javascript
function* simpleGenerator() {
}

Al llamarla, una función generadora no ejecuta su código. En su lugar, devuelve un tipo especial de iterador, conocido como generador. Puedes controlar este iterador para ejecutar segmentos del código de la función generadora:


Output appears here after Run.

También puedes consumir un generador directamente mediante un bucle for...of, que maneja automáticamente la iteración y se detiene cuando done es true:

javascript
for (const value of simpleGenerator()) {
  console.log(value);
}

Controlar el flujo

Los generadores son especialmente valiosos para controlar el flujo de ejecución. Puedes pausar la ejecución de la función en cada yield y reanudarla desde el exterior. Recuerdan su estado, es decir, las variables y sus valores, entre una entrada y otra. También puedes terminar un generador anticipadamente con return() o inyectar errores mediante throw() para manejar excepciones dentro del generador.

Patrones avanzados de generadores

Uso de yield*

En escenarios complejos, podrías querer delegar parte del control del generador a otro generador. Aquí es donde entra en juego yield*. Permite que un generador ceda los valores de otro generador, iterable o array.


Output appears here after Run.

Enviar valores a los generadores

Los generadores no solo pueden ceder valores, sino también recibirlos a través del método next(). Esto los hace interactivos y permite que la entrada externa afecte su comportamiento.


Output appears here after Run.

Aplicaciones prácticas de los generadores de JavaScript

Gestión de operaciones asíncronas

Los generadores pueden simplificar el manejo de operaciones asíncronas evitando el escenario del "infierno de callbacks". Cuando se combinan con Promesas, permiten escribir código asíncrono que es fácil de leer y de escribir.


Output appears here after Run.

Nota: Este es un ejecutor manual simplificado. En producción, normalmente usarías async/await o una biblioteca como co para automatizar la iteración.

Implementación de bucles infinitos

Los generadores son excelentes para implementar bucles infinitos que son eficientes y fáciles de controlar, lo cual puede ser útil en escenarios como el desarrollo de videojuegos o simulaciones.


Output appears here after Run.

Conclusión

Los generadores de JavaScript ofrecen un conjunto robusto de herramientas para gestionar el flujo de ejecución, manejar código asíncrono y controlar lógica compleja. Al comprender y utilizar los generadores, los desarrolladores pueden escribir código JavaScript más limpio y eficiente. Ya sea que estés gestionando llamadas a API, manejando interacciones de usuario o simplemente necesites una forma limpia de gestionar intervalos, los generadores proporcionan una solución poderosa para mejorar tus proyectos en JavaScript.

Práctica

¿Cuál es la función del carácter '*' antes de la palabra clave function en los generadores de JavaScript?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.