Closures en scope
Variabelen vastleggen
Closures en scope is een gratis Ruby Academy-les op CoddyKit. Dit is les 4 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.
Variabelen vastleggen
Een closure is een functie die de variabelen onthoudt van de plek waar ze is gedefinieerd, zelfs nadat die plek klaar is met uitvoeren. Procs en lambdas zijn closures.
name = "Ada"
greeter = -> { puts "Hello, #{name}" }
greeter.callDe variabele blijft eraan verbonden
De closure kopieert de waarde niet; hij houdt een live verwijzing naar de variabele bij. Als je de variabele later wijzigt, ziet de closure de nieuwe waarde.
count = 0
reader = -> { count }
count = 5
puts reader.callClosures kunnen variabelen wijzigen
Omdat de verwijzing live is, kan een closure de vastgelegde variabele ook wijzigen.
total = 0
adder = ->(n) { total += n }
adder.call(3)
adder.call(7)
puts totalDe omsluitende methode overleven
De vastgelegde variabele blijft bestaan zolang de closure bestaat, zelfs nadat de methode die de closure heeft gemaakt een waarde retourneert.
def counter
n = 0
-> { n += 1 }
end
c = counter
puts c.call
puts c.call
puts c.callOnafhankelijke toestanden
Elke aanroep van de fabrieksmethode maakt een nieuwe variabele, zodat afzonderlijke closures een afzonderlijke toestand behouden.
def counter
n = 0
-> { n += 1 }
end
a = counter
b = counter
puts a.call
puts a.call
puts b.callBlokparameters zijn lokaal
Parameters die tussen de verticale strepen worden gedeclareerd, zijn lokaal voor het blok en lekken nooit naar buiten, zelfs niet als er al een variabele met dezelfde naam bestaat.
x = 100
[1, 2, 3].each { |x| }
puts x # still 100Lokale blokvariabelen
Zet extra namen na een puntkomma tussen de verticale strepen om ze lokaal voor het blok te maken. Zo bescherm je variabelen erbuiten tegen onbedoelde wijzigingen.
y = "outer"
[1].each { |i; y| y = "inner" }
puts y # unchangedConfigureerbare functies bouwen
Met closures kun je configuratie één keer in een functie inbouwen en die daarna vaak hergebruiken.
def power_of(exp)
->(base) { base ** exp }
end
square = power_of(2)
cube = power_of(3)
puts square.call(5)
puts cube.call(2)Closures in iteraties
Een veelvoorkomende valkuil: een closure die in een lus wordt gemaakt, legt de variabele vast en niet een momentopname. Als je per iteratie een closure bouwt, wordt elke waarde afzonderlijk vastgelegd.
funcs = [1, 2, 3].map { |i| -> { i } }
puts funcs.map(&:call).inspectPrivétoestand inkapselen
Closures kunnen toestand achter functies verbergen, een vroege vorm van objecten. Hier is het saldo onbereikbaar, behalve via de geretourneerde lambdas.
def make_account(start)
balance = start
deposit = ->(n) { balance += n }
show = -> { balance }
[deposit, show]
end
dep, show = make_account(100)
dep.call(50)
puts show.callAlles samenbrengen
Closures verbinden code met de plek waar die is gemaakt:
- Ze leggen live verwijzingen naar omringende variabelen vast.
- De toestand blijft bestaan nadat de omsluitende methode een waarde retourneert.
- Elke closure behoudt zijn eigen onafhankelijke variabelen.
def tagger(prefix)
->(text) { "[#{prefix}] #{text}" }
end
warn = tagger("WARN")
puts warn.call("low disk space")Snelle controle
Controleer of je closures begrijpt.
Samenvatting
Je hebt closures en bereik geleerd:
- Procs en lambdas leggen omringende variabelen vast via een verwijzing.
- De vastgelegde toestand blijft bestaan nadat de omsluitende methode is afgelopen.
- Elke closure bevat een onafhankelijke toestand.
- Blokparameters blijven lokaal; gebruik
;voor lokale blokvariabelen.
def stepper(by)
pos = 0
-> { pos += by }
end
s = stepper(5)
puts s.call
puts s.callLeer 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 “Closures en scope” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Ruby Academy, waaronder “Closures en scope”, 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 “Closures en scope”?
Variabelen vastleggen 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 4 van 4.
Hoe lang duurt de les “Closures en scope”?
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
- Herhaling van blocks
- Procs
- Lambdas
- Closures en scope