Dies ist eine alte Version des Dokuments!


Funktionen

Funktionen sind ein umfangreiches und wichtiges Thema in Lua. Sie stellen auch den Großteil des Programmes dar, denn sie nehmen viel Arbeit ab. Dazu einmal folgendes Beispiel. Ich möchte einen kleinen Text in der Konsole mithilfe mehrer Anweisungen ausgeben:

print("Hallo Karl")
print("Dies ist mein kleiner Text")
print("er enthält zwar nicht viel und es könnte auch alles in eine print Anweisung")
print("aber so ist dieses Beispiel von mir nun mal... bescheuert^^")

Soweit so gut. Was jedoch wenn ich diesen Text ein 2tes oder ein 3tes mal hintereinander ausgeben möchte? Na ist doch klar! Copy&Paste! Nur wird das auf dauer ziemlich unübersichtlich und verlängert unseren Programmcode unnötigerweise denn, wer häts gedacht, dafür gibt es die Funktionen!

Mit einer Funktion können wir unseren Programmcode in einen Namen verpacken und wenn der Code dann ausgeführt werden soll, muss nur noch der Name der Funktion „genannt“ werden. Im Prinzip. Eine Funktion beginnt mit dem Schlüsselwort function darauf folgt der Name der Funktion (für das bennen von Funktionen gibt es einige Regeln auf die ich weiter unter noch zu sprechen kommen werde), sowie ein Klammerpaar und sie endet mit dem Schlüsselwort end. Innerhalb der Funktion befindet sich der Anweisungsblock.Das sieht in etwa so aus:

function MeineTolleFunktion()
  -- Irgendwelche super Anweisungen!
end

Jetzt können wir unsere Anweisungen in unsere Funktion verpacken und sie anschließend Aufrufen.

-- Mit dem Schlüsselwort geben wir dem Kompiler an das jetzt eine Funktion kommt und dann folgt der Name:
function TextAusgeben()
 
  -- Jetzt kommen unsere tollen Anweisungen:
  print("Hallo Karl")
  print("Dies ist mein kleiner Text")
  print("er enthält zwar nicht viel und es könnte auch alles in eine print Anweisung")
  print("aber so ist dieses Beispiel von mir nun mal... bescheuert^^")
 
  -- und jetzt beenden wir für den Kompiler die funktion mit dem end
end
 
-- Wollen wir unseren Text nun fünf mal hintereinander schreiben, so ist das kein Problem:
TextAusgeben()
TextAusgeben()
TextAusgeben()
TextAusgeben()

Wichtig ist hier dass wir beim Aufruf haargenau darauf achten die Funktion so zu schreiben wie wir sie benannt haben. Ein Tippfehler reicht und schon läuft nichts mehr.

function TextAusgeben()
  print(" Hallo Karl ")
end
 
-- Findest du die Fehlerhaften ausgaben? Lösung ganz unten.
TextAusgeben() -- 1
Textausgeben() -- 2
TextAusgeben() -- 3
TextAusgeben() -- 4
textAusgeben() -- 5
TextAusgeben() -- 6
TextAusheben() -- 7
TextAusgeben() -- 8
TexTAusgeben() -- 9
TextAusgeben() -- 10
TextAusgeben() -- 11
TestAusgeben() -- 12
TextAusgeben() -- 13
 
 
Fehler in den Ausgaben: 2,5,7,9,12

Super, jetzt können wir unseren Text an Karl so oft ausgeben wie wir möchten. Was aber, wenn man diesen Text nicht nur für Karl sondern auch für anderen Personen ausgeben möchte? Natürlich könnte man jetzt extra noch eine zweite Funktion schreiben, die einen anderen Text ausgibt oder man erweitert die Funktion so, dass man ihr sagen kann an welche Person sie den Text schreiben soll. Das geht über so genannte Parameter. Mit einem Parameter kann man einer Funktion bei ihrem Aufruf einen oder mehrere Werte übergeben. Dafür muss dieses Parameter bei der Erstellung der Funktion berücksichtigt werden:

function TextAusgeben( _Name )

Der Parameter wurde in den runden Klammern definiert und lässt sich innerhalb der Funktion als _Name verwenden. Dort gilt er als lokale Variable. Wir ein Parameter bezeichnet wird ist den Programmierer selbst überlassen. Man kann die Parameter einer Funktion auch a,b,c,DELTA_T nennen, nur ist dann die Wahrscheinlichkeit recht hoch das man schon einen Tag später nicht mehr weiss wovon die Rede ist. Deshalb sollte man Parameter möglichst treffen bezeichnen. Ausserdem ist es in Lua üblich das man dem Parameter einen Unterstrich vorausstellt, um ihn als solchen zu kennzeichnen.

function TextAusgeben( _NameDerPerson )
  -- Die beiden Punkte zwischen der Variable und dem String verknüpfen diesen zu einem.
  print( "Hallo " .. _NameDerPerson )
end