Ruby Academy · Les

Aangepaste each schrijven

Iteratie implementeren

Les 1 van 413 stappen

Aangepaste each schrijven is een gratis Ruby Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Ruby Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Ruby Academy bevat in totaal 4 lessen.

Iteratie implementeren

Ruby-iteratie draait om één methode: each. Door je eigen each te schrijven, bepaal je hoe een collectie wordt doorlopen en krijg je toegang tot het volledige iteratie-ecosysteem.

class Trio
  def each
    yield 1
    yield 2
    yield 3
  end
end
Trio.new.each { |n| puts n }

each levert waarden op

Roep binnen each één keer per element yield aan. Het blok dat de aanroeper meegeeft, ontvangt elke waarde op zijn beurt.

class Days
  NAMES = ["Mon", "Tue", "Wed"]
  def each
    NAMES.each { |d| yield d }
  end
end
Days.new.each { |day| puts day }

Interne gegevens opslaan

Meestal doorloopt each gegevens die in een instantievariabele zijn opgeslagen.

class Stack
  def initialize
    @items = []
  end
  def push(x); @items << x; self; end
  def each
    @items.each { |i| yield i }
  end
end
s = Stack.new
s.push(10).push(20)
s.each { |x| puts x }

Aangepaste doorloopvolgorde

Je each kan de elementen in elke gewenste volgorde doorlopen, bijvoorbeeld met reverse.

class Reversed
  def initialize(arr); @arr = arr; end
  def each
    i = @arr.length - 1
    while i >= 0
      yield @arr[i]
      i -= 1
    end
  end
end
Reversed.new([1, 2, 3]).each { |x| puts x }

Meerdere waarden doorgeven

yield kan meer dan één waarde doorgeven. Het blok ontvangt die als meerdere parameters, zoals de sleutel en waarde van een hash.

class Pairs
  def each
    yield :a, 1
    yield :b, 2
  end
end
Pairs.new.each { |key, value| puts "#{key}=#{value}" }

each retourneert self

Volgens afspraak retourneert each de collectie zelf, zodat je aanroepen kunt ketenen. Door vanuit each self terug te geven, sluit je aan bij het gedrag van ingebouwde methodes.

class Box
  def initialize(*x); @x = x; end
  def each
    @x.each { |i| yield i }
    self
  end
end
result = Box.new(1, 2).each { |i| }
puts result.class

block_given? gebruiken

Voorkom een ontbrekend blok, zodat een losse aanroep van each niet vastloopt. Vaak doe je dat door een enumerator terug te geven, zoals later wordt uitgelegd.

class List
  def initialize(*x); @x = x; end
  def each
    return @x.to_enum unless block_given?
    @x.each { |i| yield i }
  end
end
puts List.new(5, 6).each.class

Andere methodes aansturen

Zodra each bestaat, kun je binnen dezelfde klasse andere methodes daarop bouwen.

class Numbers
  def initialize(*n); @n = n; end
  def each; @n.each { |i| yield i }; end
  def total
    sum = 0
    each { |i| sum += i }
    sum
  end
end
puts Numbers.new(1, 2, 3, 4).total

Berekende reeksen

each hoeft niets op te slaan; het kan waarden direct genereren.

class Evens
  def initialize(limit); @limit = limit; end
  def each
    n = 0
    while n <= @limit
      yield n
      n += 2
    end
  end
end
Evens.new(8).each { |x| puts x }

De basis voor Enumerable

Je each is het enige bouwblok dat Enumerable nodig heeft. In de volgende les neem je het op en krijg je tientallen methodes zonder extra werk.

class Range3
  def each
    (1..3).each { |n| yield n }
  end
end
Range3.new.each { |n| print n }
puts

Alles samenbrengen

Met een aangepaste each krijg je volledige controle over iteratie:

  • yield één keer per element.
  • Doorloop elementen in elke volgorde, genereer waarden of geef paren door.
  • Retourneer volgens afspraak self.
class Countdown
  def initialize(from); @from = from; end
  def each
    @from.downto(1) { |n| yield n }
  end
end
Countdown.new(3).each { |n| puts n }

Korte controle

Toets je begrip van een aangepaste each.

Samenvatting

Je hebt geleerd hoe je een aangepaste each schrijft:

  • yield geeft elementen door aan het blok van de aanroeper.
  • Je bepaalt de doorloopvolgorde en kunt waarden genereren.
  • Retourneer volgens afspraak self.
  • each is de basis voor Enumerable.
class Squares
  def initialize(n); @n = n; end
  def each
    (1..@n).each { |i| yield i * i }
  end
end
Squares.new(4).each { |sq| puts sq }
Gratis beginnen

Leer Ruby met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
29
Lessen
109

Veelgestelde vragen

Is de les “Aangepaste each schrijven” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Ruby Academy, waaronder “Aangepaste each schrijven”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Ruby Academy bevat in totaal 4 lessen.

Wat leer ik in “Aangepaste each schrijven”?

Iteratie implementeren Je oefent met Ruby Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Ruby Academy te beginnen?

Ervaring vooraf is niet nodig. Ruby Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Aangepaste each schrijven”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Ruby Academy?

Ja. Elke les over Ruby Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Aangepaste each schrijven
  2. Enumerable includen
  3. Luie enumerators
  4. Enumerator-objecten
← Terug naar Ruby Academy