Funktionen
Eine Funktion ist ein Stück zusammengehörenden Codes, der es erlaubt, eine bestimmte Aufgabe in wiederverwendbarer Art umzusetzen. Eine Funktion enthält normalerweise thematisch zusammengehörigen Code. Es können beliebig viele Parameter an eine Funktion übergeben, und beliebig viele Funktionswerte von ihr zurückgegeben werden.
Funktionen werden in DEdK normalerweise verwendet, um den Code übersichtlicher zu gestalten. Um Aktionen, die aus sehr vielen Code Zeilen bestehen, unter einem Namen zusammenzufassen.
Hier ein einfaches Beispiel:
function SagHallo() print( "Hallo" ); end
Die Funktion heisst SagHallo und benötigt keinerlei Parameter.
Sie ruft eine weitere Funktion (print) auf um „Hallo“ auszugeben.
Es werden keinerlei Werte zurückgegeben.
Der Aufruf im Code erfolgt also einfach mit „SagHallo()“.
Der in einer Funktion enthaltene Code wird erst dann ausgeführt, wenn die Funktion aufgerufen wurde. Egal an welcher Stelle die Funktion im Code steht.
Ein leicht erweitertes Beispiel
function AntwortBitte() print( "Antwort kommt gleich..." ); return 42; end
Diese Funktion gibt, wenn sie aufgerufen wird, den Text „Antwort kommt gleich…“ aus, und liefert die Zahl 42 zurück. Ruft man diese Funktion so auf: „AntwortBitte()“ dann verfällt der Rückgabewert, da er nicht weiter verwendet wird. Benötigt man den Wert, kann man ihn sich in einer Variable merken: „antwort = AntwortBitte()“. Somit wird „antwort“ nach dem Aufruf die Zahl 42 enthalten.
Nun ein Beispiel mit Parametern:
function Addiere( _zahl1, _zahl2 ) return _zahl1 + _zahl2; end
Die Funktion erwartet nun zwei Parameter, _zahl1 und _zahl2. Die Summe dieser Parameter wird zurückgegeben. Der Unterstrich vor dem Variablennamen ist nicht notwendig. Er kann jedoch verwendet werden um Funktionsparameter von anderen Variablen abzugrenzen.
Die Zeile print( Addiere( 17, 4 ) ) ruft zunächst „Addiere“ mit 17 und 4 auf. Die Funktion gibt 21 zurück. Dieses Ergebnis wird direkt an print weitergegeben und somit auf dem Bildschirm ausgegeben.
Funktionen sollten immer nacheinander deklariert werden:
function Nummer1( _nenParameter ) MachWas( _nenParameter ); end function Nummer2() return "zzzZZ"; end
Es gibt keine Fehlermeldung, wenn man Funktionen ineinander deklariert. Dies sollte man allerdings nicht machen, da der Code dann höchstwahrscheinlich nicht mehr das macht was man möchte:
function Nummer1( _nenParameter ) MachWas( _nenParameter ); function Nummer2() return "zzzZZ"; end end
Weiterhin muss jeder Funktionsname einzigartig sein. Hat man zwei Funktionen mit gleichem Namen, wird die neuere (weiter unten im Code stehende) die ältere überschreiben. Dies ist genau wie bei Variablen:
meinWert = 17; meinWert = 4;
Nun enthält „meinWert“ 4, da einem identischen Namen ein anderer Wert zugewiesen wurde.
Das Verhalten bei Funktionen ist identisch, da Funktionen auch nur Werte sind, die einer Variablen zugewiesen wurden. Diese gültige alternative Schreibweise des ersten Beispiels verdeutlicht es:
SagHallo = function() print( "Hallo" ); end
Der Variable „SagHallo“ wird eine Funktion zugewiesen die „Hallo“ ausgibt. Die Funktionalität ist exakt identisch mit der im ersten Beispiel. Es wurde nur eine andere Schreibweise gewählt um die Zuweisung zu verdeutlichen. Da es eine Variable ist, kann man damit auch alles machen, was man normalerweise mit Variablen macht.
AuchHallo = SagHallo; AuchHallo();
Hier wird der Variable „AuchHallo“ zunächst der Wert (die Funktion!) von „SagHallo“ zugewiesen. „SagHallo“ wird nicht ausgeführt (es stehen keine Klammern für einen Aufruf dahinter).
Anschliessend wird „AuchHallo“ ausgeführt, da es die gleiche Funktion wie „SagHallo“ enthält wird also anschliessend „Hallo“ auf dem Schirm ausgegeben.
Dieses Wissen ist später nützlich um „Finished“ Funktionen in Briefings zu verstehen.
Zur Tutorial-Übersicht