Saltar para o conteúdo principal
Publicado em

Iteradores e Geradores em JavaScript

Partilhar:

Introdução

Iteradores e geradores são conceitos poderosos em JavaScript, permitindo aos programadores trabalhar com sequências de dados de forma mais controlada e eficiente. Este artigo aborda como iteradores e geradores funcionam, com exemplos práticos e sugestões para os aplicar em diferentes situações.

O que são Iteradores?

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

Criar 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. São declarados com a palavra-chave function* e utilizam yield para devolver 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

Usar Geradores para Iterações Complexas

Geradores são especialmente úteis para definir lógicas de iteração personalizadas, 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 utilizados para iteração, os geradores oferecem uma forma mais expressiva e concisa de definir lógicas iterativas, especialmente para sequências complexas ou infinitas.

Comparação e Utilização

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

Boas Práticas e Sugestões

  1. Utilize 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. Atenção às Iterações Infinitas: Em geradores que produzem sequências infinitas, certifique-se de que existe uma condição de saída na sua utilização para evitar ciclos infinitos.

Conclusão

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

Happy coding!