math.sqrt(x). Die meisten sind Teil eines Moduls oder anderweitig durch die
Analyser Software definiert.
17.2.11.2
Funktionsdefinition
Funktionen werden ganz konventionell mit dem Schlüsselwort function defi-
niert.
1
function f n c ( arg1 , arg2 , . . . )
2
> t h e f u n c t i o n body
3
end
Das folgende Beispiel definiert eine Maximum-Funktion, die das jeweils größe-
re der beiden übergebenen Werte zurück liefert.
1
function max ( n1 , n2 )
2
i f n1 > n2 then r e t u r n n1 else r e t u r n n2 end
3
end
Funktionen müssen nicht unbedingt einen Wert (oder mehrere) zurückgeben.
In diesem Fall können Sie einfach die return Anweisung weg lassen oder die
Funktion mit einem einfachen return ohne weitere Werte beenden.
Wie bereits erwähnt können Funktionen in Lua mehrere Ergebnisse zurück ge-
ben. Dies ist ein großer Vorteil, da Sie die Ergebnisse nicht in irgendeinem
Konstrukt (Behälter) zusammenfassen müssen den Sie dann als Resultat zu-
rück liefern. Es besteht auch keine Notwendigkeit, Ergebnisse in globalen Va-
riablen außerhalb der Funktion zu speichern, was zudem zu unangenehmen
Seiteneffekten führen kann.
Eine Reihe von vordefinierten Funktionen machen von dieser Fähigkeit ge-
brauch. Beispielsweise liefert die Funktion math.modf(x) aus dem math Mo-
dul den ganzen und den gebrochenen Anteil der übergebenen Zahl x zurück.
1
p r i n t ( math . modf ( 5.125 ) )
Die Definition einer Funktion mit mehreren Rückgabewerten ist genauso ein-
fach wie die jeder anderen. Das folgende Beispiel zeigt die Unterschiede. Stel-
len Sie sich eine Funktion vor, die zwei polare Koordinaten (Radius und WInkel)
in das karthesische Koordinatensystem (x und y) umwandeln soll.
1
function p o l a r 2 c a r t e s i a n ( r a d i u s , angle )
2
x = r a d i u s
3
y = r a d i u s
4
r e t u r n x , y
5
end
Anstelle irgendeines Behälters oder einer Tabelle liefern wir einfach beide Wer-
te als vielfaches Resultat zurück.
17.2.11.3
Rekursive Funktionen
Als nächstes wollen wir eine Funktion zur Berechnung der Fakultät einer belie-
bigen Zahl schreiben (dem mathematischen Äquivalent zu n!):
1
function f a c u l t y ( n )
2
i f n == 0 then
3
r e t u r n 1
4
else
5
r e t u r n n
6
end
7
end
8
9
p r i n t ( f a c u l t y ( 5 ) )
> 5
math . s i n ( math . rad ( p h i ) )
math . cos ( math . rad ( p h i ) )
f a c u l t y ( n
1 )
> 120
17.2. DIE LUA SPRACHE
0.125
217