Objets énumérateurs
Itération externe
Objets énumérateurs est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.
Itération externe
Un énumérateur est un objet qui représente une itération. Il prend en charge l'itération externe : vous récupérez les valeurs une par une avec next, au lieu de fournir un bloc à each.
enum = [10, 20, 30].each
puts enum.next
puts enum.nextObtenir un énumérateur
Appelez une méthode d'itération comme each sans bloc : vous recevez un énumérateur au lieu de lancer l'itération.
enum = [1, 2, 3].each
puts enum.classRécupérer les valeurs suivantes
next renvoie l'élément suivant à chaque appel. L'énumérateur mémorise sa position.
letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.nextStopIteration à la fin
Lorsque toutes les valeurs ont été renvoyées, next déclenche StopIteration. Vous pouvez intercepter cette exception pour arrêter proprement.
enum = [1, 2].each
begin
loop { puts enum.next }
rescue StopIteration
puts "done"
endObserver et revenir au début
peek examine la valeur suivante sans avancer ; rewind revient au début.
enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.nextCréer des énumérateurs personnalisés
Créez le vôtre avec Enumerator.new. Le bloc reçoit un générateur de valeurs y ; transmettez des valeurs avec 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Énumérateurs infinis
Comme ils fonctionnent à la demande, les énumérateurs personnalisés peuvent être infinis. Vous ne récupérez que les valeurs dont vous avez besoin.
counter = Enumerator.new do |y|
i = 1
loop { y << i; i += 1 }
end
p counter.first(5)Les énumérateurs sont itérables
Un énumérateur inclut Enumerable, donc toutes les méthodes habituelles (map, select, take) fonctionnent également, ce qui permet de combiner itération interne et externe.
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 associe un index à n'importe quel énumérateur, avec la possibilité de commencer à partir d'un nombre personnalisé.
["x", "y", "z"].each.with_index(1) do |item, i|
puts "#{i}: #{item}"
endRenvoyer un énumérateur depuis each
Dans vos propres classes, renvoyez to_enum(:each) (ou enum_for) lorsqu'aucun bloc n'est fourni, afin que les appelants puissent effectuer une itération externe.
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.nextMise en pratique
Les énumérateurs vous offrent un contrôle précis :
- Récupérez des valeurs avec
next, examinez la prochaine valeur ou revenez au début. - Créez-en des personnalisés avec
Enumerator.newet un générateur de valeurs. - Ils sont énumérables : vous pouvez donc utiliser les opérations de transformation, de sélection et de récupération.
odds = Enumerator.new do |y|
n = 1
loop { y << n; n += 2 }
end
p odds.first(4)Vérification rapide
Vérifiez votre compréhension des objets énumérateurs.
Récapitulatif
Vous avez découvert les objets énumérateurs :
- Itération externe avec
next,peeketrewind. StopIterationsignale la fin.- Créez-en des personnalisés avec
Enumerator.new { |y| ... }. - Ils sont énumérables et peuvent être infinis.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.nextQuestions Fréquemment Posées
La leçon « Objets énumérateurs » est-elle gratuite ?
Oui — le texte complet de « Objets énumérateurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Objets énumérateurs » ?
Itération externe Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Ruby Academy ?
Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Objets énumérateurs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?
Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Écrire un each personnalisé
- Inclure Enumerable
- Énumérateurs paresseux
- Objets énumérateurs