Explicar diferentes tipos de generadores en JavaScript

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *