elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Generadores o funciones generadoras en javascript por StringManolo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Generadores o funciones generadoras en javascript por StringManolo  (Leído 1,755 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Generadores o funciones generadoras en javascript por StringManolo
« en: 24 Abril 2020, 22:45 pm »

Los generadores o funciones generadores simplifican la tarea de escribir iteradores. En lugar de retornar un valor se genera una secuencia de resultados o una serie de valores. Este tipo de funciones retornan un objeto con el método next() que utilizamos para avanzar en la secuencia de expresiones definidas en el cuerpo de la función.

Código
  1. function* generarSecuencia() {
  2. yield 5 + 6;
  3. yield String.fromCharCode(parseInt("1110000", 2).toString(10));
  4. yield 3 + 4;
  5. return 14;
  6.  
  7. }
  8.  
  9. var secuencia = generarSecuencia();
  10.  
  11. alert( JSON.stringify(secuencia.next()) );
  12. alert( JSON.stringify(secuencia.next()) );
  13. alert( JSON.stringify(secuencia.next()) );
  14. alert( JSON.stringify(secuencia.next()) );
  15. alert( JSON.stringify(secuencia.next()) );
En este ejemplo primero definimos la función generadora.
Definimos cada campo precedido por la keyword yield.
Retornamos la ejecución.
En el parámetro del alert invocamos next() sobre la función y utilizamos JSON.stringify para convertir el objeto en un string para ver exactamente que contiene cada objeto retornado:
{"value":11,"done":false}
{"value":"p","done":false}
{"value":7,"done":false}
{"value":14,"done":true}
{"done":true}

 Cuando haces una llamada a este tipo de funciones su código no es ejecutado directamente, en su defecto, retorna un objeto generador que maneja la ejecución.

 El método next() nos retornará un objeto con la propiedad/key value que contiene el valor generado por la instrucción alcanzada por el objeto generator y otra propiedad de tipo booleano primitivo en el mismo objeto retornado llamada done. Esta propiedad nos indica si la función retornó su ejecución al código de llamada a través del objeto generator. Es decir, si la función ha finalizado.
Esta propiedad podemos utilizarla como iterador para evaluar las instrucciones del cuerpo de la función.
Cuando ocurre un error en uno de los campos se retornará también la propiedad done = true a menos que se implemente manejo de excepciones sobre el campo o la expresión.

Las propias funciones generadoras son iterables y podemos usar expresiones de la índole de for (valor of generador) para recorrer sus instrucciones.

Es también una buena forma remplazar callbacks evitando los problemas comunes de los callbacks en la programación asíncrona.

La funciones generadoras también permiten realizar bucles infinitos.
Código
  1. function* generarSecuenciaInfinita() {
  2. var inicial = -1;
  3. while(1) {
  4. yield inicial += 2;
  5. }
  6. }
  7.  
  8. var secuencia = generarSecuenciaInfinita();
  9.  
  10. var valor = 0;
  11. var nImpares = "";
  12. var nPares = "";
  13. while(valor < 30) {
  14. valor = secuencia.next().value;
  15. if(valor < 30) {
  16. nImpares += valor + " ";
  17. nPares += "" + (+valor + 1) + " ";
  18. }
  19. }
  20.  
  21. document.write("Números Impares menores que 30: " + nImpares);
  22. document.write("<br />Números Pares menores que 30: " + nPares);

 
 


« Última modificación: 24 Abril 2020, 22:53 pm por @XSStringManolo » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Generadores electricos
Electrónica
s3tH 1 6,598 Último mensaje 16 Noviembre 2009, 00:18 am
por skapunky
?como usar funciones de javascript en xml
Desarrollo Web
bash 3 4,679 Último mensaje 12 Agosto 2010, 22:50 pm
por Shell Root
Funciones y Condicionales en javascript
Desarrollo Web
Ali Baba 6 2,794 Último mensaje 9 Marzo 2017, 17:50 pm
por engel lex
Generadores en javascript
Desarrollo Web
Ali Baba 2 1,969 Último mensaje 28 Mayo 2017, 02:12 am
por Ali Baba
Conversiones/casteos y coerciones de tipos en javascript por StringManolo
Desarrollo Web
@XSStringManolo 2 2,289 Último mensaje 1 Mayo 2020, 05:07 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines