Grammatik & Struktur / Fluß der Objekte

Fluß der Objekte

Block

Ein Block wird mit einem Tabulator eingerückt und direkt unter eine Funktion geschrieben. Wobei ein Block aus beliebig vielen Zeilen bestehen kann.

5.times
  it.echo
	it.print

Stream

Als "Stream" wird eine Funktion bezeichnet, die an einer Funktion angehängt ist und an die das Ergebnis (und ggf. des Blocks) übergeben wird. Ein Zeilenumbruch macht hier keinen Unterschied:

Objekt.funktion
.funktion.funktion

Konkretes Beispiel:

5.times
.echo.print

Oder:

5.times.echo.print

Ein Stream wird direkt oder auf der selben Ebene mit einem Punkt angehängt.

Block und Stream

Jede Funktion kann ggf. einen Block, jedoch immer eine nachfolgende Funktion (Stream) besitzen.

Objekt.funktion
	Block
.stream

Konkret sieht dies z.B. so aus:

5.times
	it.echo
.print

Hier wird das Objekt 5 erzeugt, die Funktion ".times" aufgerufen, welche auch einen Block haben darf. In diesem wird nun mit "it" das aktuelle Objekt des Blocks abgefragt und anschließend ausgegeben. Nach dem Block wird die Funktion ".print" aufgerufen.

So ist JayMo für einen guten Flow ausgelegt:

Objekt ... --> Funktion --> Block --> Stream (Funktion) --> ...

Auto-Block-Funktion

Wird ein Block direkt an ein Objekt angehängt, so wird die Auto-Block-Funktion aktiviert.

Loop
	it.print
	Break

Dies wird hier detaillierter beschrieben: "Auto-Block-Funktion"

Push-Optionen

Jede Funktion mit Steuer-Funktionalität hat generell drei Möglichkeiten:

  1. Weder Block noch Stream ausführen
  2. Ein Objekt auf den Weg durch Block und Stream zu senden
  3. Den Block zu überspringen und ein Objekt nur an den Stream zu senden

Hier wird z.B. der Block übersprungen und nur der Stream ausgeführt

If( false ).then
	"Hello!".print
.print

Mehrfach

Anstatt einmal, wie bei "If", können Block und Stream oder nur der Stream auch mehrfach und mit unterschiedlichen Objekten ausgeführt werden.

5.times
	it.echo
.print

Die Funktion ".times" hat die Aufgabe, entsprechend oft hoch zu zählen. Im obigen Beispiel wird somit das Objekt "1" erzeugt, an den Block übergeben und fließt weiter zum Stream. Danach wird das Objekt "2" erzeugt und ebenfalls an Block und Stream weitergegeben. Dann "3", "4" und "5".

Jedes Mal wird also ein Objekt erzeugt und wandert durch Block und Stream.

1 --> Block --> Stream --> ...
2 --> Block --> Stream --> ...
3 --> Block --> Stream --> ...
...

Veränderung

In den meisten Fällen wird ein Objekt unverändert durch Block und Stream fließen.

Es ist jedoch auch möglich, dass das Objekt im Block verändert oder ausgetauscht wird. Dies geschieht z.B. bei einem Fehler. In diesem Fall wird der Block abgebrochen und das aktuelle Objekt wird ersetzt durch das Fehler-Objekt. Dieses kann anschließend mit ".catch" ausgewertet werden.

Es ist aber auch möglich, das Objekt selbst zu ändern:

5.times
	it = it + 3
.print

Mit "it" wird das aktuelle Objekt im Block ausgelesen. Mit "=" kann auch ein neuer Wert zugewiesen werden.

So kommt nun bei der Funktion ".print" nicht 1-5 an, sondern ein um 3 erhöhter Wert an!

Pass!

Gerade in längeren Stream-Ketten kann es vorkommen, dass ein Objekt etwas umfangreicher bearbeitet werden soll. Hierzu lässt sich z.B. ".pass" nutzen. Mit ".pass" wird das aktuelle Objekt an den Block (und weiter zum Stream) gesendet. Im Block kann "it" wie gewünscht verändert werden:

5.pass
	a = it * 3
	x = a + a - 2
	it = x - 3
.print

Hier wird das Objekt 5 mit der Funktion ".pass" an den Block übergeben. Dort wird damit gearbeitet und als Ergebnis dem Block der neue Wert "25" zugewiesen. Am Ende vom Block wird die "25" an den Stream übergeben.

Mit ".print" wird in diesem Fall somit "25" ausgegeben.

- Powered by OghsWiki -

 

 

Unterstützen

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

Erhalten:  0 €