Funktionen / Rückgabewert einer Funktion

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.

- Powered by OghsWiki -

 

 

Unterstützen

Die Entwicklung von "JayMo" wird derzeit nur durch Eigeninitiative ermöglicht.

Erhalten:  0 €