Zusammenfassung
In dieser Lektion hast du gelernt:
- Eine Funktion ist ein benanntes Stück Code, das du einmal schreibst und so oft ausführst, wie du willst. Du definierst sie mit
local function name() … endund rufst sie mit ihrem Namen und Klammern auf:name(). Eine Funktion existiert erst ab der Zeile, in der sie definiert wird; sie früher aufzurufen ergibtattempt to call a nil value (global 'name'). - Ein Parameter ist ein Name in der Definition, ein Argument ist ein Wert im Aufruf:
local function saeen(pflanze, anzahl),saeen("Karotten", 12). Die Argumente kommen der Reihe nach in die Parameter. Ein fehlendes Argument istnil, überzählige werden ignoriert. returngibt einen Wert an die Stelle des Aufrufs zurück und beendet die Funktion.printzeigt einen Wert nur an; eine Funktion ohnereturngibtnilzurück. Eine Funktion, die etwas berechnet, sollte das Ergebnis zurückgeben.return a, bgibt mehrere Werte zurück:local schachteln, rest = packeEier(20). Ein Aufruf liefert alle seine Werte nur als letztes Element einer Liste.- Ein Standardwert wird am Anfang der Funktion eingesetzt:
beutel = beutel or 1. Bei einem Parameter, derfalsesein kann, prüfeif x == nil then. - Eine lokale Variable existiert von ihrer Zeile bis zum Ende ihres Blocks, und eine Funktion sieht die lokalen Variablen, die oberhalb von ihr erstellt wurden. Eine Variable ohne
localist global: Ein Tippfehler erstellt stillschweigend eine neue, und jede Funktion kann sie überschreiben. Deshalb ist jede Variable und jede Funktionlocal. - Eine Funktion ist ein Wert: Du kannst sie in einer Variable speichern und ohne Klammern an eine andere Funktion übergeben.
function(x) … endohne Namen ist eine anonyme Funktion. table.sort(t, function(a, b) return a > b end)sortiert nach deiner Regel: Die Funktion gibttruezurück, wennavorbsteht, undfalsebei gleichen Elementen. Elemente, die die Regel als gleich ansieht, können in beliebiger Reihenfolge landen, füge also eine zweite Regel hinzu, wenn es darauf ankommt.- Eine Closure ist eine Funktion, die sich die lokalen Variablen der Funktion merkt, die sie erstellt hat, wie das
anzahleines Zählers. error("Meldung")hält das Programm mitmain.lua:N: Meldungan (error(meldung, 0)ohne die Position), undassert(bedingung, meldung)tut dasselbe, wenn die Bedingung nicht wahr ist.pcall(f, …)fängt den Fehler ab: Es gibttrueund die Ergebnisse zurück oderfalseund die Meldung.
In der nächsten Lektion verwendest du Tabellen auf eine neue Weise: als Dictionaries, die Werte unter Namen statt unter Zahlen speichern, zum Beispiel wie viel von jeder Pflanze in der Scheune liegt.
So schreibst du es:
Anweisungen
- 1
Üben wir. Schreibe eine Funktion
summeUndMaximummit einem Parameterliste, die zwei Werte zurückgibt: die Summe der Liste und ihre größte Zahl. Benutze sie fürverkaeufeund für die Liste{5, 9, 3}. Das Programm gibt Folgendes aus:Summe: 142, Maximum: 48 Summe: 17, Maximum: 9 - 2
Schreibe eine Funktion
mitBonusmit den Parameternbetragundprozent. Sie gibtbetragplusprozentProzent davon zurück, mit//abgerundet:betrag + betrag * prozent // 100. Der Standardwert vonprozentist10. GibmitBonus(142)undmitBonus(142, 50)aus. Das Programm gibt156und213aus. - 3
Sortiere
verkaeufemit einer Vergleichsfunktion vom besten Tag zum schlechtesten und gib sie mit Leerzeichen verbunden aus. Das Programm gibt48 35 27 20 12aus.