Generadores en JavaScript | Explicado con ejemplos

Generadores en JavaScript | Explicado con ejemplos
Los generadores son funciones que se utilizan para obtener múltiples valores en varios momentos. Los generadores son un poco complejos de entender, por lo que vamos a definir qué generadores son en palabras simples y luego entran en detalles sobre los generadores y su trabajo.

JavaScript a menudo presenta soluciones para varios problemas, especialmente con la llegada de la versión ES6 de JavaScript. Una de las características clave que se introdujeron en ES6 fueron los generadores, los generadores en JavaScript se usan con iteradores para crear un flujo de datos o un flujo de datos. Los generadores nos ayudan a evitar problemas de función de devolución de llamada.

¿Qué son realmente los generadores?

En palabras simples, los generadores son funciones especiales; A diferencia de las funciones normales que solo tienen una declaración de retorno, los generadores devuelven múltiples valores pero en diferentes momentos.

Para ser más descriptivos, los generadores son funciones que devuelven el valor a mitad de la función y luego dejan de ejecutar después de guardar el estado, se llama a este paso de devolver un valor, guardar el estado y detener la ejecución de la ejecución flexible un valor y pausa.

Durante esta pausa, el programa puede funcionar en alguna otra funcionalidad, y luego, cuando se nos requiere, se le pide al generador que devuelva el siguiente valor, pero en lugar de reiniciar toda la función, el generador funciona desde el punto en que se detuvo y produce el Siguiente valor. Por lo tanto, crear un flujo constante de datos. Es por eso que estas funciones se denominan "generadores", ya que se utilizan para generar el flujo de datos.

Podemos ver los siguientes diagramas de trabajo para comprender mejor la diferencia entre las funciones normales y del generador:

Y la función del generador funciona como este:

Cómo definir una función de generador?

Dado que las funciones del generador son funciones especiales, por eso usamos una palabra clave especial mientras las definimos que es "función*" - asterisco después de la palabra clave de función. La sintaxis es como:

function* functionName (params)
// cuerpo de la función
valor de rendimiento;

'

Nota:

  • Función*: palabra clave para definir funciones del generador
  • FunctionName: el identificador para esta función
  • Parámetros: parámetros opcionales que desea usar
  • Rendimiento: devuelve el valor y detiene la ejecución de la función

Valor de retorno: Objeto [generador] - un objeto generador O Infinado si el generador está vacío

Ahora estamos familiarizados con lo que es una función de generador, pero aún no estamos familiarizados con su tipo de retorno, ese es el "objeto generador".

¿Qué es un objeto generador??

Cuando se crea una función de generador, devuelve un objeto que debemos inicializar en alguna variable, esta variable se conoce como objeto generador. Este objeto generador se usa para obtener el siguiente valor de la función.

Sintaxis de inicializar un objeto generador

variable = GeneratorFunctionName (argumentos);

Después de haber creado el objeto Generador, puede usar la función "objeto.próximo()"

El objeto.próximo() Devuelve un objeto JSON con dos propiedades, una es el "valor" y el otro es el "hecho" propiedad.

Obtener valores de una función de generador

Creemos una función de generador simple que nos devolverá un nuevo valor cada vez que se llama, con las siguientes líneas de código:

generador de funciones()
rendimiento 1;
rendimiento "encontrado";
rendimiento 3;

Ahora que tenemos un generador, necesitamos inicializarlo con un objeto generador, lo hacemos con la siguiente declaración:

const genobject = generador ();

Ahora también tenemos el objeto generador. Todo lo que tenemos que hacer ahora es llamar al próximo() función del objeto generador e imprima el objeto json con el consola.registro() función.

consola.log (genobject.próximo());
consola.log (genobject.próximo());
consola.log (genobject.próximo());

El fragmento de código completo se ve así:

generador de funciones()
rendimiento 1;
rendimiento "encontrado";
rendimiento 3;

const genobject = generador ();
consola.log (genobject.próximo());
consola.log (genobject.próximo());
consola.log (genobject.próximo());

Obtenemos la siguiente salida:

Como puede ver, hemos impreso 3 objetos JSON diferentes con 3 llamadas diferentes a la misma función de generador. Pero, a veces queremos usar el valor, no el objeto json. Podemos hacer eso accediendo al valor Propiedad del objeto JSON con la siguiente línea de código:

consola.log (genobject.próximo().valor);
consola.log (genobject.próximo().valor);
consola.log (genobject.próximo().valor);

Con estas líneas, obtenemos la siguiente salida:

Como puedes ver, el objeto.próximo().valor nos devuelve un valor que incluso podemos pasar a otra función.

Trabajo de la función del generador en la ejecución de código simultáneo

Para este tutorial, creemos una función de generador simple que producirá números de 1 a 5 y después de cada número que obtengamos del generador, nuestro programa nos alertará de que está haciendo algunos cálculos sobre ese número y ha dejado la función del generador.

El primer paso es crear una función de generador que generará 5 números diferentes en 5 llamadas diferentes con las siguientes líneas de código:

generador de funciones()
consola.log ("Función del generador inicializada");
para (deja i = 1; yo <= 5; i++)
consola.log ("Generador interno para un nuevo rendimiento");
rendimiento i;

Como puede ver, hemos creado un bucle que devolverá 1 nuevo entero en cada llamada de rendimiento del generador y nos solicitará cada vez que el programa esté dentro de la función del generador.

Ahora, necesitamos inicializar esta función del generador con el objeto generador con la siguiente línea de código.

const genobject = generador ();

Ahora, necesitamos una función que haga algo de trabajo en los valores producidos, cree la función utilizando las siguientes líneas:

Función tablePrinter (num)
consola.log ('actualmente imprimiendo la tabla de:' + num);

Tenemos una función de generador, un objeto generador y una función que funcionará en algunos valores que se pasan dentro de él. Ahora, todo lo que necesitamos es un iterador que se iterará a través del objeto del generador y pasará los valores a la función. Hacemos eso usando las siguientes líneas de código:

DerodedValue = GenObject.próximo().valor;
while (prodedValue)
tablePrinter (prodedValue);
DerodedValue = GenObject.próximo().valor;

Lo que hará este código es que tomará el siguiente valor del generador y lo almacenará dentro de una variable. Luego, en el bucle While, verificará si la variable está indefinida o no, y si no está indefinida, pasará este valor a la función "tableprinter " y pasar al siguiente valor.

El fragmento de código completo es como:

generador de funciones()
consola.log ("Función del generador inicializada");
para (deja i = 1; yo <= 5; i++)
consola.log ("Generador interno para un nuevo rendimiento");
rendimiento i;


const genobject = generador ();
Función tablePrinter (num)
consola.log ('actualmente imprimiendo la tabla de:' + num);

DerodedValue = GenObject.próximo().valor;
while (prodedValue)
tablePrinter (prodedValue);
DerodedValue = GenObject.próximo().valor;

La salida del siguiente código es:

Como puede ver, el programa entra dentro de la función del generador y produce un nuevo valor, ahorra estados, detiene la ejecución de la función, entra dentro del ""tableprinter " función y realiza ejecución allí. Una vez hecho, vuelve a la función del generador para un nuevo rendimiento. Todo este proceso se repite hasta que el generador sigue produciendo nuevos rendimientos. Así, por lo que es un flujo de datos.

Eso es todo para generadores en JavaScript.

Conclusión

Los generadores son funciones especiales que pueden detener su ejecución a mitad de camino para producir un valor, guardar su estado y permitir que el programa realice otras tareas. Cuando sea necesario, la función del generador "currículums " su ejecución del estado en el que se detuvieron en. Los generadores se utilizan para generar un flujo constante de datos. Se utilizan en colaboración con promesas e iteradores para crear un flujo infinito de datos y evitar problemas de función de devolución de llamada.