Funktionen / Steuer-Funktionen

Steuer-Funktionen

Steuer-Funktionen bieten gegenüber normalen Funktionen eine erweiterte Funktionalität und können z.B. Blöcke mehrfach ausführen.
Eine typische Steuer-Funktion ist z.B. ".each".

Die Kontrolle dieser Steuer-Möglichkeiten findet über die magische Variable "func" statt.

Bitte zuvor folgenden Artikel lesen: "Fluß der Objekte"

Individuelle Verarbeitung

Die Funktion ".each" einer Liste verdeutlicht, dass hier die Verarbeitung etwas anders verläuft:

[3,9,2,6,8,1].each.print

Hier wird ".print" für jedes einzelne Element in der Liste ausgeführt. Die Funktion ".each" übernimmt also die Steuerung der weiteren Verarbeitung.

Solche Steuer-Funktionen lassen sich in JayMo auch selbst definieren. In diesem Fall werden die normalen Klammern "()" um ein zwei Ausrufezeichen ergänzt, was signalisiert dass diese Funktion besondere Eigenschaften besitzt.

::test()!! Int

Diese Funktion besitzt nun erweitere Fähigkeiten, weshalb Argumente extra initialisiert und die weitere Verarbeitung (Block/Stream) selbst angestoßen werden muss. Dies muss allerdings auch wirklich erfolgen, da ansonsten weder Argumente, noch Block oder Stream ausgeführt werden.

Die Möglichkeiten dazu bietet uns die magische Variable "func".

Argumente initialisieren

Durch die Steuer-Funktionalität müssen die Argumente selbst initialisiert werden:

func.init

Hiermit werden alle Argumente initialisiert. Durch die Übergabe einer Zahl, lassen sich einzelne Argumente initialisieren.

func.init(3)

_init init push

Weitere Verarbeitung

Info:
Als Block wird ein eingerückter Bereich bezeichnet, Stream steht für nachfolgende Funktionen.

Mit "func.hasBlock" und "func.hasStream" lässt sich prüfen, ob ein Block bzw. Stream beim aktuellen Aufruf vorhanden ist.

Mit "func.push" lässt sich ein Objekt zur weiteren Verarbeitung an Block und Stream senden:

::test()? Int
	it = 7
	func = func.push( it )

Hier wird das Objekt 7 an Push übergeben. Die 7 wandert somit durch den Block sowie den Stream weiter verarbeitet. Zurück kommt das Ergebnis dieser Verarbeitung, welches hier als Funktions-Ergebnis zurückgegeben wird.

In Verbindung mit einer Schleife kann so eine eigene ".each"-Funktion oder individuelle Schleife erstellt werden.

::myEach()? Int
	7.times
		func.push( it )
	func = 7

Mittels Auto-Block-Funktion ist es so nun möglich, individuelle "Schlüsselwörter" wie z.B. "Count" selbst zu realisieren.

- Powered by OghsWiki -

 

 

Unterstützen

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

Erhalten:  0 €