Explicar la función de generador en ES6

ES6 introduce un nuevo concepto llamado Generador (o función de Generador). Le brinda una nueva forma de trabajar con iteradores y funciones. El generador ES6 es un nuevo tipo de función que se puede pausar en el medio o muchas veces en el medio y reanudar más tarde. En la función estándar, el control permanece con la función llamada hasta que regresa, pero la función generadora en ES6 permite que la función que llama controle la ejecución de una función llamada.

La diferencia entre un generador y una función regular es:

  • En respuesta a una llamada del generador, su código no se ejecuta. En su lugar, devuelve un objeto especial llamado ‘Objeto generador’ para administrar la ejecución.
  • En cualquier momento, la función del generador puede devolver (o ceder) el control a la persona que llama.
  • El generador puede devolver (o generar) múltiples valores según el requisito, a diferencia de una función regular.

Sintaxis: las funciones de generador tienen una sintaxis similar a las funciones regulares. Como única diferencia, la función generadora se indica con un asterisco (*) después de la palabra clave de función.

function *myfunction() { }

Operador de rendimiento: en la declaración de rendimiento, la ejecución de la función se suspende y se devuelve un valor a la persona que llama. En este caso, se retiene suficiente estado para que la función se reanude donde la dejó. Después de la última ejecución de rendimiento, la función reanuda la ejecución inmediatamente después de que se haya reanudado. Puede producir una serie de valores utilizando esta función.

Método next de JavaScript: el método next() reanudará la ejecución de la función del generador cuando reciba un argumento, reemplazando la expresión obtenida donde se detuvo la ejecución con el argumento del método next(). Los objetos devueltos por el método next() siempre tienen dos propiedades. 

  • value-El valor obtenido es el valor.
  • done- El estado completo de una función se puede expresar como un valor booleano verdadero. De lo contrario, arroja false.

Ejemplo: En este ejemplo, tomamos una función generadora y generamos 3 números y llamamos a la función generadora 4 veces seguidas para ver el resultado real y, en conclusión, vemos que cuando llamamos a la función generadora por cuarta vez da el valor como indefinido y hecho propiedad como verdadero. Debido a que en esta llamada, la función generadora ya completa la generación de tres números consecutivos, por lo que cuando llamamos a la función por cuarta vez, no da ningún valor y actualiza el estado de hecho a verdadero, significa que no hay valor para generar en la cuarta vez.

JavaScript

<script>
    function* generator() {
        yield 1;
        yield 2;
        yield 3;
    }
    let obj = generator();
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
</script>

Producción:

{
  done: false,
  value: 1
}
{
  done: false,
  value: 2
}
{
  done: false,
  value: 3
}
{
  done: true,
  value: undefined
}

Declaración de devolución en una función de generador: una declaración de devolución envía un valor específico a su llamador. Finaliza la ejecución de la llamada a la función y devuelve el resultado a la persona que llama. Las sentencias definidas después de la sentencia return no se ejecutan en una función. Por lo tanto, la declaración de retorno debe aparecer al final de la función.

Ejemplo 2: aquí usamos la declaración de retorno en la tercera línea para ver cómo funciona el retorno en la función del generador. Normalmente, cuando escribimos cualquier declaración después de la declaración de devolución, da un error, pero aquí, cuando escribimos cualquier declaración de rendimiento después de la declaración de devolución, no da ningún error, excepto que muestra que la llamada a la función del generador finalizó, lo que significa que no hay más pasos. para generar el número.

JavaScript

<script>
    function* generator() {
        yield 1;
        yield 2;
        return 3;
        yield 4;
    }
    let obj = generator();
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
</script>

Producción:

{
  done: false,
  value: 1
}
{
  done: false,
  value: 2
}
{
  done: true,
  value: 3
}
{
  done: true,
  value: undefined
}

Llamar a una función generadora dentro de otra para generar una función: podemos llamar a una función generadora dentro de otra función generadora usando el operador yield * (o declaración).

Ejemplo 3: En este ejemplo, llamamos a una función generadora dentro de otra función generadora usando la instrucción yield *. Hay dos funciones generadoras, una se denomina generador y la otra se denomina mifunción , ambas funciones son funciones de parámetros. Aquí creamos un objeto de función generador llamando y pasando el parámetro a esa función y dentro de la función generadora vamos a llamar a myfunction que es una función generadora usando el operador yield *.

JavaScript

<script>
    function* myfunction(k) {
        yield k + 1;
        yield k + 2;
        yield k + 3;
    }
    function* generator(i) {
        yield i;
        yield* myfunction(i);
        yield i + 5;
    }
    let obj = generator(6);
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
    console.log(obj.next());
</script>

Producción:

{
  done: false,
  value: 6
}
{
  done: false,
  value: 7
}
{
  done: false,
  value: 8
}
{
  done: false,
  value: 9
}
{
  done: false,
  value: 11
}
{
  done: true,
  value: undefined
}

Publicación traducida automáticamente

Artículo escrito por debadebaduttapanda7 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 *