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.nextObtendo 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.classObtendo 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.nextStopIteration 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"
endEspiando 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.nextConstruindo 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.nextEnumeradores 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}"
endRetornando 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.nextJuntando tudo
Os enumeradores oferecem um controle minucioso:
- Obtenha valores com
next, consulte o próximo valor ou retroceda. - Crie enumeradores personalizados com
Enumerator.newe 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,peekerewind. StopIterationsinaliza 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.nextPerguntas 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
- Escrevendo um each personalizado
- Incluindo Enumerable
- Enumeradores preguiçosos
- Objetos enumeradores