Iterator Helpers

Os Iterator Helpers trazem métodos como map(), filter(), take() e drop() direto para iterators e generators, permitindo processar sequências grandes ou infinitas sob demanda.

Iterators e generators são uma forma poderosa de trabalhar com sequências de dados sob demanda, sem carregar tudo em memória de uma vez. O problema é que, até pouco tempo atrás, eles não tinham métodos como map() ou filter() — era preciso converter tudo para array primeiro. Os Iterator Helpers resolvem exatamente isso.

O problema antes dos Iterator Helpers

function* numeros() {
    let n = 1;
    while (true) yield n++;
}

// Precisava converter para array (e cortar antes, ou nunca terminava)
const primeiros5 = [...numeros()].slice(0, 5); // trava, sequência infinita!

Como numeros() gera uma sequência infinita, transformar tudo em array antes de filtrar simplesmente nunca termina.

Como funcionam os Iterator Helpers

Agora, iterators (incluindo generators) têm métodos nativos que operam item a item, sob demanda, sem precisar materializar a sequência inteira:

function* numeros() {
    let n = 1;
    while (true) yield n++;
}

const primeiros5 = numeros().take(5);

console.log([...primeiros5]); // [1, 2, 3, 4, 5]

take(5) consome apenas os 5 primeiros valores do generator infinito, sem travar.

Encadeando operações

Assim como em arrays, é possível encadear map(), filter(), take() e outros métodos:

function* numeros() {
    let n = 1;
    while (true) yield n++;
}

const resultado = numeros()
    .filter(n => n % 2 === 0)
    .map(n => n * 10)
    .take(3);

console.log([...resultado]); // [20, 40, 60]

Cada valor passa pela cadeia inteira antes do próximo ser gerado — nada é processado além do necessário.

drop() para pular itens

const numeros = [1, 2, 3, 4, 5, 6].values(); // iterator de um array

const semOsTres = numeros.drop(3);

console.log([...semOsTres]); // [4, 5, 6]

Convertendo para array só quando necessário

function* linhas(texto) {
    for (const linha of texto.split('\n')) yield linha;
}

const primeirasTresLinhas = linhas(arquivoGrande).take(3).toArray();

toArray() materializa o resultado final em um array comum, só depois de todas as transformações "preguiçosas" terem sido aplicadas.

Quando usar

Compatibilidade

Essa é uma funcionalidade mais recente e ainda em expansão entre navegadores. Vale sempre checar o suporte antes de usar em produção, principalmente se o projeto precisar suportar navegadores mais antigos.

caniuse

Conclusão

Os Iterator Helpers trazem a mesma expressividade dos métodos de array para iterators e generators, permitindo trabalhar com sequências grandes ou infinitas de forma preguiçosa e eficiente, sem abrir mão de um código legível.

Tecnologia:
js

Deixe seu Comentário!

Comentário
Nome
Email