Los generadores son la función cuya ejecución se puede pausar y reanudar según los requisitos del programador. Usamos la palabra clave yield en esta función para detener la ejecución del código. Los generadores son muy útiles en la programación asíncrona. Los generadores se combinan con diferentes características del lenguaje de programación y se vuelven útiles para que el programador lo use para una programación efectiva.
Los generadores se pueden crear utilizando la expresión de la función del generador y el constructor de la función del generador:
Expresión de la función:
function* FUNCTION_NAME( argu1[, argu2[,...argu3]]]) { // Generator body }
Constructor de funciones de generador:
var generator_constructor = Object.getPrototypeOf( function*(){} ).constructor var FUNCTION_NAME = generator_constructor()
Porque los generadores son muy útiles. Hablemos de diferentes tipos de generadores en javascript:
Generador normal: es el tipo de generador en el que un generador como un iterador genera el siguiente valor después de la ejecución de cada método next() para la función del generador. Aquí, de este modo, generaremos números de manera continua hasta la última palabra clave de rendimiento.
Javascript
function* generator(){ for(var i = 0 ; i<5; i++){ yield i; } } var first_gen = generator(); console.log(first_gen.next().value); console.log(first_gen.next().value); console.log(first_gen.next().value); console.log(first_gen.next().value); console.log(first_gen.next().value);
Producción:
0 1 2 3 4
Generador con Parámetros: En este Generador, pasamos el parámetro al siguiente método del generador y reemplaza este parámetro con la última palabra clave de rendimiento que está antes de pausar la ejecución de la función. Aquí, el parámetro de la función del primer método siguiente de los generadores no se reemplazará con ninguna palabra clave de rendimiento porque no hay palabras clave de rendimiento antes de la primera pausa de la función. De la misma manera segundos, la llamada del siguiente método con parámetro se reemplaza con la primera palabra clave de rendimiento y el tercer parámetro del método siguiente se reemplaza con la segunda palabra clave de rendimiento.
Javascript
function* generator(){ para1 = yield ; console.log(para1); para2 = yield ; console.log(para2) } var first_gen = generator(); first_gen.next("this is not going to assign any one"); first_gen.next("I am first"); first_gen.next("I am second")
Producción:
I am first I am second
Generador con propiedad de Objeto: En este tipo de Generador, Generador se define como la propiedad del Objeto. Podemos crear una instancia de generador y luego ejecutar el siguiente método para una mayor ejecución del generador. En este caso, el generador es igual que un generador normal pero es una propiedad de un Objeto.
Javascript
var temp = { *generator(){ yield "1 yield"; yield "2 yield"; } } var gen = temp.generator(); console.log(gen.next().value); console.log(gen.next().value);
Producción:
1 yield 2 yield
Generador con Otro Generador: En este tipo de Generador tenemos un generador que contiene un Rendimiento con otro Generador dentro de su cuerpo funcional. Cuando la ejecución encuentra rendimiento con otro generador, finaliza la ejecución de ese generador y luego continúa con el generador principal.
Javascript
function* generator1(){ yield "this is first Generator"; } function* generator2(){ yield* generator1(); yield "this is second Generator"; } var gen = generator2(); console.log(gen.next().value); console.log(gen.next().value);
Producción:
this is first Generator this is second Generator
Generador con palabra clave de retorno: en este tipo de generador, el cuerpo de la función contiene una palabra clave de retorno. Aquí, cuando la función generadora encuentra la palabra clave de retorno, se detiene y sale de la ejecución de la función y devuelve el objeto generador de valor. Después de la palabra clave return nunca se ejecutará en la ejecución de nuestro programa.
Javascript
function* Return_generator(){ yield "First"; return "Second"; yield "Infinit"; } var gen = Return_generator(); console.log(gen.next().value); console.log(gen.next().value);
Producción:
First Second
Generador creado como método de Objeto: Podemos crear Generador como un método de Objeto y podemos usarlos según el requisito. En este tipo, cuando creamos una función normal para el Objeto, creamos la misma función Generadora del Objeto. Podemos usar la función Generator con la instancia de Object. En este caso, Generator está disponible como método de Object.
Javascript
class temp{ *generator(){ yield "Generator with object method "; yield "Second flow of Generator"; } } var temp2 = new temp() var gen = temp2.generator(); console.log(gen.next().value); console.log(gen.next().value);
Producción:
Generator with object method Second flow of Generator
Publicación traducida automáticamente
Artículo escrito por satyam00so y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA