0Pricing
Ruby Academy · Leçon

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.next

Obtenir 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.class

Ré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.next

StopIteration à 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"
end

Observer 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.next

Cré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}"
end

Renvoyer 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.next

Mise 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.new et 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, peek et rewind.
  • StopIteration signale 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.next

Questions 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

  1. Écrire un each personnalisé
  2. Inclure Enumerable
  3. Énumérateurs paresseux
  4. Objets énumérateurs
← Retour à Ruby Academy