El protocolo iterable en JavaScript
Todo lo que tenga Symbol.iterator funciona en for-of y con spread.
class Countdown {
constructor(from) {
this.from = from;
}
*[Symbol.iterator]() {
for (let n = this.from; n > 0; n -= 1) yield n;
}
}
const countdown = new Countdown(4);
console.log([...countdown], Math.max(...countdown));
for (const n of countdown) {
if (n === 2) break;
console.log("tick", n);
}
const manual = {
[Symbol.iterator]() {
let n = 0;
return { next: () => (n < 2 ? { value: n++, done: false }
: { value: undefined, done: true }) };
},
};
console.log([...manual]);
Cómo funciona
- El método devuelve un iterador con un
next. - Un generador es la manera fácil de escribir uno.
Symbol.asyncIteratores la misma idea parafor await.
Palabras clave y builtins usados aquí
MathSymbolbreakclassconstconstructorforfromifletofreturnthisyield
El intento, en números
- Líneas
- 26
- Caracteres a escribir
- 479
- Tokens
- 165
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 94 segundos.
Paso 2 de 2 en Iterar de forma asíncrona; paso 11 de 19 en Promesas y async.