Menu
Coddy logo textTech

Was ist eine Closure?

Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 14 von 54.

Du hast gelernt, dass Funktionen in Variablen gespeichert, als Argumente übergeben und von anderen Funktionen zurückgegeben werden können. Nun werden wir eine der mächtigsten Konsequenzen davon untersuchen: Closures.

Ein Closure entsteht, wenn eine verschachtelte Funktion sich an die lokalen Variablen ihrer einschließenden Funktion „erinnert“, selbst nachdem diese äußere Funktion ihre Ausführung beendet hat. Das mag zunächst seltsam klingen: Wie kann eine Variable noch existieren, nachdem die Funktion, die sie erstellt hat, abgeschlossen ist?

Hier ist ein einfaches Beispiel, das dieses Konzept veranschaulicht:

function createCounter()
    local count = 0
    
    return function()
        count = count + 1
        return count
    end
end

local counter = createCounter()
print(counter())  -- Ausgabe: 1
print(counter())  -- Ausgabe: 2
print(counter())  -- Ausgabe: 3

Wenn createCounter() aufgerufen wird, erstellt es eine lokale Variable count und gibt eine anonyme Funktion zurück. Normalerweise würdest du erwarten, dass count verschwindet, sobald createCounter() abgeschlossen ist. Aber die zurückgegebene Funktion hat weiterhin Zugriff auf count. Sie „schließt diese Variable ein“.

Jedes Mal, wenn du counter() aufrufst, greift es auf dieselbe Variable count zu und verändert sie, die beim ersten Ausführen von createCounter() erstellt wurde. Die innere Funktion führt ihre Umgebung mit sich und bewahrt den Zustand zwischen den Aufrufen.

challenge icon

Aufgabe

Einfach

Schreibe eine Funktion createMultiplier, die eine Multiplikatorfunktion mit einem bestimmten Faktor erstellt und sie dann sofort verwendet, um eine angegebene Zahl zu multiplizieren.

Logik:

  • Erstelle innerhalb von createMultiplier eine verschachtelte Funktion, die einen number-Parameter entgegennimmt
  • Die verschachtelte Funktion sollte ihren Parameter mit dem factor aus der äußeren Funktion multiplizieren
  • Die verschachtelte Funktion bildet einen Closure und merkt sich den Wert von factor
  • Rufe die Multiplikatorfunktion mit dem number-Parameter auf und gib das Ergebnis zurück

Parameter:

  • factor (number): Der Multiplikatorwert
  • number (number): Die zu multiplizierende Zahl

Rückgabewert:

  • Das Ergebnis der Multiplikation von number mit factor (number)

Probier es selbst

function createMultiplier(factor, number)
    local multiply = function(x)
        return x * factor
    end
    
    -- Verwende die multiply-Funktion unten

end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmablauf

Übe selbstständig: Online-Lua-Compiler