Anonyme Funktionen
Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 13 von 54.
Da du nun verstehst, dass Funktionen in Variablen gespeichert und weitergegeben werden können, gibt es eine noch knappere Möglichkeit, sie zu schreiben. Anstatt einer Funktion immer einen Namen zu geben, kannst du sie direkt dort erstellen, wo du sie brauchst. Diese werden anonyme Funktionen genannt.
Eine anonyme Funktion ist einfach eine Funktion ohne Namen. Du definierst sie mit dem Schlüsselwort function, auf das unmittelbar ihre Parameter und ihr Funktionskörper folgen:
function(a, b)
return a + b
endDadurch wird ein Funktionswert erstellt, der sofort verwendet werden kann. Anonyme Funktionen sind besonders nützlich, wenn Funktionen als Argumente an andere Funktionen übergeben werden. Erinnerst du dich an das Beispiel für benutzerdefiniertes Sortieren von vorhin? So sieht es mit einer anonymen Funktion aus:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Anstatt eine separate benannte Funktion für den Vergleich zu definieren, wird die Funktion direkt als zweites Argument an table.sort() übergeben. Dadurch wird der Code kompakter und die Sortierlogik bleibt genau dort, wo sie verwendet wird.
Aufgabe
EinfachSchreibe eine Funktion filterByThreshold, die numbers und threshold entgegennimmt und eine neue Tabelle zurückgibt, die nur Zahlen enthält, die größer als der Schwellenwert sind.
Im Editor gibt es bereits einen Helfer, filter(list, keep): Er ruft für jeden Wert keep(value) auf und gibt eine neue Tabelle mit den Werten zurück, für die keep true zurückgegeben hat. Rufe filter auf und übergib die Prüfung als anonyme Funktion, die direkt im Aufruf geschrieben wird, so wie die Lektion eine Funktion an table.sort() übergibt. Speichere die Prüfung nicht in einer Variable und gib ihr keinen Namen.
Parameter:
numbers(table): Eine listenartige Tabelle mit numerischen Wertenthreshold(number): Der Mindestwert (exklusiv) für die Filterung
Rückgabewert: Eine Tabelle, die nur Zahlen enthält, die größer als der Schwellenwert sind (table)
Probier es selbst
local function filter(list, keep)
local result = {}
for _, value in ipairs(list) do
if keep(value) then
table.insert(result, value)
end
end
return result
end
function filterByThreshold(numbers, threshold)
-- Schreibe hier den Code
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmablauf
1Fortgeschrittene Tabelleniteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen2Weitere Funktionen der Tabellenbibliothek
table.concat()Tabellenkonstruktion & unpack()table.sort()Eigene Sortierung mit FunktionenRückblick – Highscore-Tabelle3Fortgeschrittene Funktionskonzepte
Mehrere Werte zurückgebenVariadische Funktionen (...)Funktionen als Werte erster KlasseAnonyme FunktionenWas ist eine Closure?Rückblick – Einfacher Event-HandlerÜbe selbstständig: Online-Lua-Compiler