12.4 Rückgabewerte (Return)

Wenn Ihre Funktion einen oder mehrere Werte zurückgibt, ist es erforderlich, diese Werte in Klammern zu setzten, weil sonst der Parser sie als separate Anweisungen behandeln würde. Betrachten Sie den folgenden Code:

 
; falscher Code
Function p_Max(a, b)
    If a > b Then Return a
    Return b
EndFunction

Der Hollywood-Parser würde diesen Code wie folgt interpretieren:

 
Function p_Max(a, b)
    If a > b Then Return   ; Wenn a > b, dann gib keinen Wert zurück
    a                      ; führt Funktion a() aus !!
    Return                 ; gibt keinen Wert zurück !!
    b                      ; führt Funktion b() aus !!
EndFunction

Sie sehen, dass dies nicht viel Sinn macht. Die Klammern sind obligatorisch, weil in Hollywood können Sie beliebig viele Befehle in einer Zeile ohne Trennzeichen eingeben. Und Hollywood ermöglicht es Ihnen, Funktionen aufzurufen, die Argumente ohne Klammern nicht akzeptieren. Daher wird eine Anweisung wie Return a in zwei Anweisungen umgewandelt, nämlich Return und ein a(). Wenn Sie die Variable a zurückgeben wollen, müssen Sie Return(a) schreiben. Die richtige Version unserer Funktion p_max() hat also wie folgt auszusehen:

 
Function p_Max(a, b)
    If a > b Then Return(a)
    Return(b)
EndFunction

Durch die Verwendung der Klammern signalisieren Sie Hollywood, dass die Variablen a und b zum Befehl Return() gehören und nicht zwei getrennte Funktionen sind.

Wenn eine Funktion mehr als einen Wert zurückgibt, aber Sie wollen nur den ersten Rückgabewert haben, müssen Sie rund um den Funktionsaufruf ein Paar runde Klammern setzen. Dadurch wird das Ergebnis dieser Funktion auf einen einzigen Wert reduziert. Zum Beispiel gibt die folgende Funktion drei Werte zurück:

 
Function p_ThreeVals()
    Return(1, 2, 3)
EndFunction

Wenn Sie diese Funktion nun als Argument an einen Befehl anhängen, die eine mehrfache Anzahl von Argumenten akzeptiert, z.B. DebugPrint(), dann werden alle drei Rückgabewerte an DebugPrint() weitergegeben:

 
DebugPrint(p_ThreeVals()) ; gibt "1 2 3" aus

Wenn Sie wollen, dass DebugPrint() nur den ersten Rückgabewert von p_ThreeVals() erhält, müssen Sie Klammern um die Funktion p_ThreeVals() setzten, so dass es wie folgt aussieht:

 
DebugPrint((p_ThreeVals()))  ; gibt "1" aus

Funktionen können nicht nur Zahlen zurückgeben, sondern auch Zeichenketten, Tabellen und sogar andere Funktionen. Zum Beispiel ist der folgende Code völlig legal:

 
Function p_Return_a_Table()
    Return({1, 2, 3, 4, 5})
EndFunction
a = p_Return_a_Table()
DebugPrint(a[3])         ; gibt 4 aus

In der Praxis werden Sie wahrscheinlich diese Funktion nicht sehr viel verwenden. Aber Sie sollten wissen, dass es zumindest möglich ist, Funktionen zu haben, die Tabellen oder andere Funktionen zurückgeben können. Ein anderes Beispiel:

 
Function p_Return_Func()
    Return(Function(s) DebugPrint(s) EndFunction)
EndFunction
myfunc = p_Return_Func()
myfunc("Hello World!")   ; führt DebugPrint("Hello World!") aus


Navigation zeigen