Publicado em

Iteradores e Geradores em JavaScript

Partilhar:

Introdução

Iteradores e geradores são conceitos poderosos em JavaScript, permitindo aos desenvolvedores trabalhar com sequências de dados de maneira mais controlada e eficiente. Este artigo aborda como iteradores e geradores funcionam, com exemplos práticos e dicas para aplicá-los em diferentes situações.

O que são Iteradores?

Um iterador é um objeto que permite percorrer uma coleção de dados, elemento por elemento. Em JavaScript, um iterador é um objeto que implementa o método next(), que retorna um objeto com duas propriedades: value e done.

Criando um Iterador Simples

function criarIterador(array) {
  let proximoIndice = 0;

  return {
    next: function() {
      return proximoIndice < array.length ?
        { value: array[proximoIndice++], done: false } :
        { done: true };
    }
  };
}

let meuIterador = criarIterador([1, 2, 3]);
console.log(meuIterador.next().value); // 1
console.log(meuIterador.next().value); // 2
console.log(meuIterador.next().value); // 3
console.log(meuIterador.next().done);  // true

O que são Geradores?

Geradores são funções especiais em JavaScript que simplificam a criação de iteradores. Eles são declarados com a palavra-chave function* e usam yield para retornar valores sequencialmente.

Exemplo de Gerador

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

let meuGerador = geradorNumeros();
console.log(meuGerador.next().value); // 1
console.log(meuGerador.next().value); // 2
console.log(meuGerador.next().value); // 3

Usando Geradores para Iterações Complexas

Geradores são especialmente úteis para definir lógicas de iteração customizadas, incluindo aquelas que seriam difíceis ou impossíveis de realizar com estruturas de iteração tradicionais.

Geradores com Estados

Geradores podem manter um estado interno entre as chamadas de yield.

function* geradorID() {
  let id = 1;

  while (true) {
    yield id++;
  }
}

let criadorID = geradorID();
console.log(criadorID.next().value); // 1
console.log(criadorID.next().value); // 2

Iteradores vs. Geradores

Embora ambos sejam usados para iteração, geradores oferecem uma maneira mais expressiva e concisa de definir lógicas iterativas, especialmente para sequências complexas ou infinitas.

Comparação e Uso

  • Iteradores: Mais controle manual, adequado para iterações que não se encaixam no padrão de gerador.
  • Geradores: Mais simples e diretos, ideais para lógicas iterativas complexas ou customizadas.

Boas Práticas e Dicas

  1. Use Geradores para Sequências Complexas: Aproveite a simplicidade dos geradores para gerar sequências complexas ou infinitas.
  2. Gestão de Estado: Utilize geradores para manter o estado em iterações, evitando variáveis globais ou externas.
  3. Cuidado com Iterações Infinitas: Em geradores que produzem sequências infinitas, certifique-se de que haja uma condição de saída em seu uso para evitar loops infinitos.

Conclusão

Iteradores e geradores oferecem meios poderosos e flexíveis para lidar com iteração de dados em JavaScript. Compreender como utilizá-los pode significativamente simplificar a implementação de lógicas iterativas complexas e melhorar a legibilidade e a eficiência do seu código.

Happy coding!