Los generadores son un tipo especial de función con la capacidad de pausarse y reanudarse más tarde, permitiendo que otro código se ejecute mientras tanto.
Los generadores son un tipo especial de función con la capacidad de pausarse y reanudarse más tarde, permitiendo que otro código se ejecute mientras tanto.
El código decide que tiene que esperar, por lo que permite que otros códigos “en la cola” se ejecuten y se reserva el derecho de reanudar sus operaciones “cuando lo que está esperando” esté hecho.
Todo esto se hace con una única y sencilla palabra clave: yield
. Cuando un generador contiene esa palabra clave, la ejecución se detiene.
Un generador puede contener muchas yield
palabras clave, por lo que se detiene varias veces, y se identifica mediante la *function
palabra clave, que no debe confundirse con el operador de desreferencia de puntero utilizado en lenguajes de programación de nivel inferior como C, C++ o Go.
Los generadores posibilitan paradigmas completamente nuevos de programación en JavaScript, permitiendo:
- Comunicación bidireccional mientras un generador está en funcionamiento
- Bucles while de larga duración que no congelan el programa
A continuación se muestra un ejemplo de un generador que explica cómo funciona todo.
function *calculator(input) { var doubleThat = 2 * (yield (input / 2)) var another = yield (doubleThat) return (input * doubleThat * another)}
Lo inicializamos con
const calc = calculator(10)
Luego iniciamos el iterador en nuestro generador:
calc.next()
Esta primera iteración inicia el iterador. El código devuelve este objeto:
{ done: false value: 5}
Lo que sucede es que el código ejecuta la función, tal input = 10
como se le pasó en el constructor del generador. Se ejecuta hasta que llega a yield
, y devuelve el contenido de yield
: input / 2 = 5
. Por lo tanto, obtuvimos un valor de 5 y la indicación de que la iteración no ha finalizado (la función simplemente está en pausa).Te recomendamos Dioses y mitos
En la segunda iteración pasamos el valor 7
:
calc.next(7)
Y lo que obtuvimos es:
{ done: false value: 14}
7
se colocó como el valor de doubleThat
. Importante: puede leerse como input / 2
era el argumento, pero ese es solo el valor de retorno de la primera iteración. Ahora lo omitimos y usamos el nuevo valor de entrada, 7
, y lo multiplicamos por 2.
Luego llegamos al segundo rendimiento, y este devuelve doubleThat
, por lo que el valor devuelto es 14
.
En la siguiente y última iteración, pasamos 100
calc.next(100)
y a cambio obtuvimos
{ done: true value: 14000}
A medida que se realiza la iteración (no se encuentran más palabras clave de rendimiento), simplemente devolvemos (input * doubleThat * another)
lo que equivale a 10 * 14 * 100
.
Tips para principiantes de JavaScript
Tal vez te puede interesar:
- Cómo generar un número aleatorio entre dos números en JavaScript
- Cómo esperar el evento DOM listo en JavaScript simple
- Cómo determinar si una fecha es hoy en JavaScript
- Cómo contar el número de propiedades en un objeto JavaScript
Tutorial de generadores de JavaScript
Los generadores son un tipo especial de función con la capacidad de pausarse y reanudarse más tarde, permitiendo que otro código se ejecute mientras tanto.
programar
es
2025-01-17
Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente