5.01) Fluß der Objekte

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

Objekt.funktion
Block
.stream

Konkret sieht dies dann so aus:

5.times
%.echo
.print

Hier wird das Objekt 5 erzeugt, die Funktion ".times" aufgerufen, welche einen Block hat und danach die Funktion ".print" aufruft.

JM° ist von Grund auf für einen guten Flow ausgelegt.

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

Als "Stream" wird in diesem Fall die nächste Funktion bezeichnet, an die das Ergebnis übergeben wird.

Ist kein Block vorhanden, wird das Objekt direkt an den Stream übergeben. Ein Zeilenumbruch macht hier somit keinen Unterschied

Objekt.funktion
.funktion.funktion

Konkretes Beispiel:

5.times
.echo.print

# Oder:
5.times.echo.print

Mehrfach

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 hier ein Objekt erzeugt und damit Block und Stream ausgeführt.

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

Auf dem Weg verändern

In den meisten Fällen wird das Objekt auf diesem Weg direkt hindurch fließen.

Jedoch ist es auch möglich, dass das Objekt im Block ausgetauscht wird.
Die 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 dann mit ".catch" ausgewertet werden.

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

5.times
% = % + 3
.print

Mit % oder _IT kann das aktuelle Objekt im Block ausgelesen werden. Mit der Funktion "=" ist es möglich, hier einen neuen Wert zuzuweisen.

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

GO!

Wenn wir nun aktuell ein Objekt haben, das wir etwas komplexer mit einem Block bearbeiten wollen, so können wir, anstatt eine eigene Funktion zu schreiben, ".go" nutzen. "Go" übergibt das aktuelle Objekt an den Block und dann weiter zur nächsten Funktion (Stream).

5.go
a = %*3
x = a+a-2
% = x-3
.print

 Hier wird das Objekt 5 mit der Funktion ".go" an den Block übergeben. Dort wird damit gearbeitet und dann dem Block das Ergebnis zugewiesen. Am Ende vom Block wird dieses Ergebnis an die nächste Funktion übergeben.

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