Generador

Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

 

El objecto Generador es retornado por generator function  y conforma tanto un protocolo iterable como un protocolo iterador

Sintaxis

	function* gen() { 
	  yield 1;
	  yield 2;
	  yield 3;
	}

	var g = gen(); // "Generator { }"

Métodos

Generator.prototype.next()
Retorna el valor ofecido por la expresión yield
Generator.prototype.return()
Retorna el valor dado y finaliza el generador.
Generator.prototype.throw()
Lanzá un error al generador

Ejemplo

Un iterador infinito

	function* idMaker() {
	    var index = 0;
	    while(true)
	        yield index++;
	}

	var gen = idMaker(); // "Generator { }"

	console.log(gen.next().value); // 0
	console.log(gen.next().value); // 1
	console.log(gen.next().value); // 2
	// ...

Objetos generadores legados

Firefox(SpderMonkey) tambén implementa una versón mas temprana de generadores en JavaScript 1.7, donde el asterisco (*) en la declaración de la funcion no era necesario(sólo use la palabra reservada yield en el cuerpo de la función). Sin embargo, los generadores legados se encuentran deprecados. No los use. Serán removidos (bug 1083482).

Métodos de generadores legados

Generator.prototype.next()
 
Retorna el valor ofrecido por la expresión yield.  Esto se corresponde con el método next() en el objeto generador de ES2015.
 
Generator.prototype.close()

Cierra el generador. Sí el método next() es llamado por la expresión StopIteration, un error será lanzado. Esto se corresponde con el método return() del objeto generador de ES2015.
Generator.prototype.send()
Utilizado para enviar un valor al generador. El valor es retornado por la expresion yield, y retorna el valor ofrecido por la siguiente expresion yield. send(x) Se corresponde a next(x) en el objeto generador de ECMAScript 2015.
Generator.prototype. throw()
Lanza un error al generador. Esto se corresponde con el metodo throw() en el objeto genererador de ES2015.

Ejemplo de generador legado

	function fibonacci() {
	  var a = yield 1;
	  yield a * 2;
	}

	var it = fibonacci();
	console.log(it);          // "Generator {  }"
	console.log(it.next());   // 1
	console.log(it.send(10)); // 20
	console.log(it.close());  // undefined
	console.log(it.next());   // throws StopIteration (as the generator is now closed)
	

Especificaciones

Especificación Estado Comentario
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Generator objects' in that specification.
Standard Definición inicial
ECMAScript Latest Draft (ECMA-262)
The definition of 'Generator objects' in that specification.
Draft  
     
     

Compatibilidad con navegadores

Funcionalidad Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Soporte basico 39.0 (Yes) (Yes) No support No support No support
Funcionalidad Android Android Webview Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Soporte básico No support 39.0 (Yes) (Yes) No support No support No support 39.0

 

Vea también

Generadores Legados

Generadores ES2015

Etiquetas y colaboradores del documento

 Colaboradores en esta página: nicolasolmos
 Última actualización por: nicolasolmos,