Lua-Programmierung: Funktionen
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Was sind Funktionen?
Stellen sie sich mal vor, Sie wollen ein paar Rechnungen durchführen und jedesmal dazwischen eine Trennlinie ausgeben. Dazu müsste man jedes mal auf's neue:
print("-----------------")
schreiben.
Auf Dauer ist das sehr lästig, deswegen wurde ein Mechanismus entwickelt, mit dem dies einfacher "funktioniert": die Funktionen.
[Bearbeiten] Funktionen in Lua
In Lua gelten für Funktionsnamen dieselben Regeln wie für Variablen: Um in Lua eine Funktion/Variable zu erstellen, schreibt man zuerst ihren Namen. Der Name unterliegt folgenden Bedingungen:
* Eine Funktion/Variable muss mit einem Unterstrich (_) oder mit einem Buchstaben beginnen * Weiter dürfen eine beliebige Anzahl an Buchstaben, Ziffern und Unterstrichen folgen
Außerdem darf keine Funktion/Variable einen der folgenden Namen haben:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
[Bearbeiten] Aufruf
Funktionen aufgerufen haben wir schon oft genug. Dies wird ihnen sicher auf die Sprünge helfen:
print("Ich bin eine Funktion, das hier ist das Argument")
Funktionsaufrufe haben folgenden Syntax:
Funktionsname(Argumente durch Komma getrennt)
[Bearbeiten] Definition
Nun zum eigentlichen Grund des Kapitels: das Erstellen einer Funktion. Eine Funktion wird folgendermaßen erstellt:
function Funktionsname(Parameter durch Komma getrennt) Anweisungen end
Das kann theoretisch auch alles in einer Zeile stehen, das ist aber nicht unbedingt übersichtlich. Parameter werden noch behandelt.
Jetzt können wir das Beispiel am Anfang des Kapitels als Funktion schreiben:
function Trennlinie() print("-----------------") end --Ein Beispiel-Programm: Trennlinie() print(5+4) Trennlinie() print(7*21) Trennlinie() print(22-133) Trennlinie()
Die Ausgabe sieht so aus:
----------------- 9 ----------------- 147 ----------------- -111 -----------------
[Bearbeiten] Argumente & Parameter
Kommen wir jetzt also zu den Begriffen, auf die wir teilweise schon ein bisschen vorgegriffen haben. Argumente sind die Dinger, die man einer Funktion übergebt, damit die Funktion damit was anfangen kann. Ein großer Vorteil von Lua ist, wie bereits gesagt, dass es nur einen Datentyp gibt. Deswegen kann man einer Funktion zum Aufruf alle Datentypen bzw. Variablen übergeben die es gibt. Sie müssen nur aufpassen: Strings beispielsweise können nicht addiert werden. Deswegen sollte man sinnvollerweise einen Namen verwenden, bei dem sich sofort erschließt, was für Datentypen man übergeben muss.
Wenn nun also die Argumente übergeben wurden, werden die Datentypen den Parametern zugewiesen. Die Parameter sind innerhalb (lokal) der Funktion ganz normale Variablen.
Genug Theorie, jetzt etwas Praxis: Man kann die Trennlinie-Funktion derart erweitern, dass man angeben kann, wie viele Striche ausgegeben werden sollen:
function Trennlinie(a) b="" for i = 0, a, 1 do b=b.."-" end print(b) end --Beispiel: Trennlinie(5) Trennlinie(6) Trennlinie(7)
Die Ausgabe lautet:
------ ------- --------
[Bearbeiten] Rückgabewerte
Manchmal möchte man Funktionen programmieren, die einen Wert zurückgeben, sprich dieser Wert kann beispielsweise einer Variablen zugewiesen werden. Hier zuerst ein verändertes Beispiel von Trennlinie:
function Trennlinie(a) b="" for i = 0, a, 1 do b=b.."-" end return b end --Beispiel: print(Trennlinie(13))
Die Ausgabe lautet:
--------------
Das Schlüsselwort return gibt also einen Wert zurück, der dann gleich weiter verarbeitet werden kann.
[Bearbeiten] Funktionen sind Datentypen
Für Funktionsnamen gilt wie bei Variablennamen auch dieselben Regeln. Eigentlich zählen Funktionen auch zu den Datentypen. Die Schreibweise:
function Funktionsname(Parameter durch Komma getrennt) Anweisungen end
ist eine vereinfachte Form von der folgenden:
Funktionsname/Variablenname = function(Parameter durch Komma getrennt) Anweisungen end
Deswegen kann man Funktionen beliebig Variablen zuweisen und einer solchen Variable auch alle anderen Datentypen, praktisch ist da sicher nil