JavaScriptPOOintermediario

Iterator personalizado

Iteradores estão por toda parte no JavaScript moderno: arrays, strings, Map, Set — todos usam o protocolo de iteração. Quando você cria seus próprios objetos que precisam ser percorridos com for...of ou espalhados com o operador ..., implementar Symbol.iterator dá a eles o mesmo tratamento nativo. Isso evita depender de arrays intermediários e mantém a interface consistente com o resto da linguagem.

O PROBLEMA

Crie classe Intervalo com from e to. Implemente [Symbol.iterator] para iterar com for...of.

EXEMPLO

const r = new Intervalo(1, 5);
for (const n of r) console.log(n);
→ 1 2 3 4 5
[...r] → [1,2,3,4,5]

SOBRE O CONCEITO

Para um objeto ser iterável, ele deve ter um método [Symbol.iterator] que retorna um objeto com um método next(). Cada chamada de next() deve devolver { value: ..., done: boolean }. O erro comum é esquecer de retornar esse objeto ou pular a propriedade done, o que faz o loop for...of nunca terminar ou acessar valores indefinidos. Aqui, na classe Intervalo, o método next() precisa controlar o estado interno (usando this.atual, por exemplo) e incrementar até atingir this.to. Quando o limite é ultrapassado, retorna { done: true }. Lembre-se: function e generators são proibidos; você deve usar class com constructor e Symbol.iterator diretamente.

RESOLUÇÃO

Mais exercícios de POO

JSP021 · AvançadoClasse LinkedListJSP005 · BásicoContador de instânciasJSP008 · Básicoinstanceof e verificação de tipoJSP009 · BásicoClasse abstrata simulada
Ver todos os exercícios de JavaScript