Lua-Programmierung: Funktionen

Aus Wikibooks

Wechseln zu: Navigation, Suche

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

Persönliche Werkzeuge