Rückgabewert einer Funktion
Wenn nicht anders definiert, gibt eine Funktion immer "nil" zurück.
::test()
"abc".print
this.test.print
In diesem Beispiel wird die Funktion "test" definiert und aufgerufen, welche "abc" ausgibt. Danach soll der Rückgabe-Wert der Funktion ausgegeben werden, welcher (weil nicht definiert) "nil" ist.
Werte zurückgeben
Soll gezielt ein Wert zurückgeben und damit auch die Verarbeitung der Funktion beenden werden, so existieren hierfür generell zwei Möglichkeiten:
Klassisch
Klassisch wird mit "Return" die Verarbeitung beendet und ein Wert zurückgegeben.
::test
Return "xyz"
Funktions-Handle
Da "Return" nur ein Hilfsobjekt ist, existiert noch eine tiefer liegende Möglichkeit. Hierzu wird mit der magischen Konstante "func" direkt auf die momentane Funktionsdefinition zugegriffen. Über diesen "Handle" lässt sich die aktuelle Funktion steuern.
::test
func = "xyz"
Da der Funktion ein Ergebnis ("xyz") zugewiesen wird, werden nachfolgende Befehle ignoiert und die Funktion gibt den Wert "xyz" als Ergebnis zurück.
Hierfür gibt es ebenso eine sehr schöne Kurzform. Denn '§' ist die Abkürzung für "func":
::test
§ = "xyz"
Dies ist mit dem vorherigen Beispiel identisch, jedoch schlanker.
Typ-Prüfung
Wird kein Typ festgelegt, kann jedes beliebige Objekt und "nil" zurückgegeben werden. Wird an die Funktions-Definition ein Typ angehängt, so muss der Rückgabewert von diesem Typ sein:
::test() Object
So kann für das vorherige Beispiel klar definiert werden, dass ein String zurückgegeben werden muss:
::test() Str
func = "xyz"
Die Klammern könnten in diesem Fall entfallen, erhöhen aber die Lesbarkeit.
Nil
Wird ein Rückgabe-Typ definiert, muss ein Wert von diesem Typ zurückgegeben werden. Damit ist "nil" allerdings nicht mehr erlaubt. Soll ebenso die Rückgabe von "nil" möglich sein, wird (wie bei Variablen) an den Rückgabe-Typ ein Fragezeichen angehängt:
::test() Str?
func = nil
So darf diese Funktion nun einen String oder Nil zurückgeben.