0Pricing
Ruby Academy · Lektion

Closures und Gültigkeitsbereich

Variablen erfassen

Closures und Gültigkeitsbereich ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Variablen erfassen

Eine Closure ist eine Funktion, die sich die Variablen von der Stelle merkt, an der sie definiert wurde – auch nachdem die Ausführung dort beendet ist. Procs und Lambdas sind Closures.

name = "Ada"
greeter = -> { puts "Hello, #{name}" }
greeter.call

Die Variable bleibt dabei

Die Closure kopiert den Wert nicht, sondern behält eine aktive Referenz auf die Variable. Wenn Sie die Variable später ändern, sieht die Closure den neuen Wert.

count = 0
reader = -> { count }
count = 5
puts reader.call

Closures können Werte ändern

Da die Referenz aktiv bleibt, kann eine Closure die erfasste Variable auch verändern.

total = 0
adder = ->(n) { total += n }
adder.call(3)
adder.call(7)
puts total

Die umgebende Methode überleben

Die erfasste Variable bleibt so lange erhalten wie die Closure – auch nachdem die Methode, die sie erstellt hat, zurückgegeben wurde.

def counter
  n = 0
  -> { n += 1 }
end
c = counter
puts c.call
puts c.call
puts c.call

Unabhängige Zustände

Jeder Aufruf der Factory-Methode erstellt eine neue Variable. Daher behalten getrennte Closures jeweils ihren eigenen Zustand.

def counter
  n = 0
  -> { n += 1 }
end
a = counter
b = counter
puts a.call
puts a.call
puts b.call

Blockparameter sind lokal

Parameter, die zwischen den Pipe-Zeichen deklariert werden, sind lokal für den Block und gelangen niemals nach außen – selbst wenn eine gleichnamige Variable existiert.

x = 100
[1, 2, 3].each { |x| }
puts x  # still 100

Block-lokale Variablen

Listen Sie zusätzliche Namen nach einem Semikolon zwischen den Pipe-Zeichen auf, um sie ausdrücklich als block-lokal festzulegen und äußere Variablen vor versehentlichen Änderungen zu schützen.

y = "outer"
[1].each { |i; y| y = "inner" }
puts y  # unchanged

Konfigurierbare Funktionen erstellen

Mit Closures können Sie eine Konfiguration einmal in eine Funktion einbauen und diese anschließend beliebig oft wiederverwenden.

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 Schleifen

Ein häufiger Stolperstein: Eine in einer Schleife erstellte Closure erfasst die Variable, nicht eine Momentaufnahme. Wenn Sie pro Iteration eine Closure erstellen, wird jeder Wert separat erfasst.

funcs = [1, 2, 3].map { |i| -> { i } }
puts funcs.map(&:call).inspect

Privaten Zustand kapseln

Closures können Zustand hinter Funktionen verbergen – eine frühe Form von Objekten. Hier ist der Kontostand nur über die zurückgegebenen Lambdas erreichbar.

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 zusammenführen

Closures verbinden Code mit seinem Entstehungsort:

  • Sie erfassen aktive Referenzen auf umgebende Variablen.
  • Der Zustand bleibt erhalten, nachdem die umgebende Methode zurückgegeben wurde.
  • Jede Closure behält ihre eigenen, unabhängigen Variablen.
def tagger(prefix)
  ->(text) { "[#{prefix}] #{text}" }
end
warn = tagger("WARN")
puts warn.call("low disk space")

Kurzer Test

Testen Sie Ihr Verständnis von Closures.

Zusammenfassung

Sie haben Closures und Gültigkeitsbereiche kennengelernt:

  • Procs und Lambdas erfassen umgebende Variablen per Referenz.
  • Der erfasste Zustand bleibt über die umgebende Methode hinaus bestehen.
  • Jede Closure enthält einen unabhängigen Zustand.
  • Blockparameter bleiben lokal; verwenden Sie ; für block-lokale Variablen.
def stepper(by)
  pos = 0
  -> { pos += by }
end
s = stepper(5)
puts s.call
puts s.call

Häufig gestellte Fragen

Ist die Lektion „Closures und Gültigkeitsbereich“ kostenlos?

Ja — der vollständige Text von „Closures und Gültigkeitsbereich“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Closures und Gültigkeitsbereich“?

Variablen erfassen Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Closures und Gültigkeitsbereich“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Wiederholung zu Blöcken
  2. Procs
  3. Lambdas
  4. Closures und Gültigkeitsbereich
← Zurück zu Ruby Academy