Generator function
Geradores são essenciais quando você precisa trabalhar com sequências grandes ou infinitas sem consumir toda a memória de uma vez. Em código real, eles aparecem em pipelines de dados, processamento de streams e em bibliotecas como Redux Saga. Saber usar function* e yield te dá controle fino sobre a execução, gerando valores sob demanda.
O PROBLEMA
Crie generator function* paresAte(n) que gera números pares de 0 até n usando yield.
EXEMPLO
for (const n of paresAte(10)) → 0 2 4 6 8 10
SOBRE O CONCEITO
Uma generator function é declarada com function* e usa yield para produzir valores um a um, mantendo o estado entre as chamadas. Ao contrário de return, que encerra a função imediatamente, yield pausa a execução e pode ser chamado múltiplas vezes. O erro comum é usar return para devolver o resultado – por exemplo, return n dentro do gerador –, o que interrompe o gerador na primeira iteração, fazendo com que o for...of só receba um valor ou nenhum. Com yield, você pode iterar por todos os pares até n. Lembre-se: geradores são iteráveis, então for...of funciona perfeitamente.
RESOLUÇÃO