Ruby Academy · Les

Closures en scope

Variabelen vastleggen

Les 4 van 413 stappen

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

De 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.call

Closures 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 total

De 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.call

Onafhankelijke 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.call

Blokparameters 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 100

Lokale 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  # unchanged

Configureerbare 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).inspect

Privé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.call

Alles 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.call
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 “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

  1. Herhaling van blocks
  2. Procs
  3. Lambdas
  4. Closures en scope
← Terug naar Ruby Academy