Aangepaste each schrijven
Iteratie implementeren
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.classblock_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.classAndere 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).totalBerekende 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 }
putsAlles 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:
yieldgeeft elementen door aan het blok van de aanroeper.- Je bepaalt de doorloopvolgorde en kunt waarden genereren.
- Retourneer volgens afspraak
self. eachis 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 }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
- Aangepaste each schrijven
- Enumerable includen
- Luie enumerators
- Enumerator-objecten