0Pricing
Ruby Academy · Aula

Objetos enumeradores

Iteração externa.

Objetos enumeradores é uma aula grátis de Ruby Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ruby Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ruby Academy inclui 4 aulas no total.

Iteração externa

Um Enumerator é um objeto que representa uma iteração. Ele oferece iteração externa: o senhor obtém os valores um de cada vez com next, em vez de fornecer um bloco a each.

enum = [10, 20, 30].each
puts enum.next
puts enum.next

Obtendo um enumerador

Chame um método iterador como each sem bloco e receberá um Enumerator, em vez de executá-lo.

enum = [1, 2, 3].each
puts enum.class

Obtendo valores sucessivos

next retorna o elemento seguinte a cada chamada. O Enumerator memoriza sua posição.

letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.next

StopIteration no fim

Quando os valores acabam, next gera StopIteration. O senhor pode capturá-la para encerrar de forma limpa.

enum = [1, 2].each
begin
  loop { puts enum.next }
rescue StopIteration
  puts "done"
end

Espiando e rebobinando

peek observa o próximo valor sem avançar; rewind retorna ao início.

enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.next

Construindo enumeradores personalizados

Crie o seu próprio com Enumerator.new. O bloco recebe um gerador y; forneça valores com y << ou y.yield.

evens = Enumerator.new do |y|
  n = 0
  loop do
    y << n
    n += 2
  end
end
puts evens.next
puts evens.next
puts evens.next

Enumeradores infinitos

Como são baseados em solicitações, os Enumerators personalizados podem ser infinitos. O senhor obtém apenas o que precisa.

counter = Enumerator.new do |y|
  i = 1
  loop { y << i; i += 1 }
end
p counter.first(5)

Enumerators são Enumerable

Um Enumerator inclui Enumerable, portanto todos os métodos usuais (map, select, take) também funcionam, combinando iteração interna e externa.

fib = Enumerator.new do |y|
  a, b = 0, 1
  loop do
    y << a
    a, b = b, a + b
  end
end
p fib.take(8)

with_index

with_index anexa um índice a qualquer Enumerator, opcionalmente começando por um número personalizado.

["x", "y", "z"].each.with_index(1) do |item, i|
  puts "#{i}: #{item}"
end

Retornando um enumerador de each

Nas suas próprias classes, retorne to_enum(:each) (ou enum_for) quando nenhum bloco for fornecido, para que os chamadores possam iterar externamente.

class Trio
  def each
    return to_enum(:each) unless block_given?
    yield 1; yield 2; yield 3
  end
end
e = Trio.new.each
puts e.next
puts e.next

Juntando tudo

Os enumeradores oferecem um controle minucioso:

  • Obtenha valores com next, consulte o próximo valor ou retroceda.
  • Crie enumeradores personalizados com Enumerator.new e um gerador de valores.
  • Eles são enumeráveis, portanto mapear, selecionar e obter valores funcionam.
odds = Enumerator.new do |y|
  n = 1
  loop { y << n; n += 2 }
end
p odds.first(4)

Verificação rápida

Teste sua compreensão dos objetos enumeradores.

Recapitulação

Você aprendeu sobre objetos enumeradores:

  • Iteração externa por meio de next, peek e rewind.
  • StopIteration sinaliza o fim.
  • Crie enumeradores personalizados com Enumerator.new { |y| ... }.
  • Eles são enumeráveis e podem ser infinitos.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.next

Perguntas Frequentes

A aula “Objetos enumeradores” é grátis?

Sim — o texto completo de “Objetos enumeradores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ruby Academy, atualize para CoddyKit PRO. O curso de Ruby Academy inclui 4 aulas no total.

O que vou aprender em “Objetos enumeradores”?

Iteração externa. Você pratica Ruby Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Ruby Academy?

Nenhuma experiência prévia é necessária. Ruby Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Objetos enumeradores”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Ruby Academy?

Sim. Cada aula de Ruby Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Escrevendo um each personalizado
  2. Incluindo Enumerable
  3. Enumeradores preguiçosos
  4. Objetos enumeradores
← Voltar para Ruby Academy