… g: JayMo-Flow (Follow the Flow) / Filter im Flow

Filter im Flow

Bevor ein Objekt an Block oder Stream weitergegeben wird, kann ein Filter installiert werden.

Pass

Zum Verständnis des Nachfolgenden wird zuerst die Funktion "pass" genauer betrachtet.

"pass" übergibt das aktuelle Objekt in die weitere Verarbeitung durch ggf. einen Block und ggf. einen Stream.

123.pass
	it.print
.print

In diesem Beispiel wird das Int-Objekt "123" an den angehängten Block und den nachfolgenden Stream übergeben. Somit erfolgt zweimal die Ausgabe von "123".

Hierbei können Block oder/und Stream vorhanden sein, müssen jedoch nicht. Allerdings wird immer zuerst der Block und dann der Stream ausgeführt.

123.pass
	it.print
123.pass
.print
123.pass.print

In allen drei Fällen wird hier einmalig die "123" ausgegeben.

Weitergeben, aber nur wenn ...

An dieser Stelle können nun Filter installiert werden. Die Funktionen dazu nennen sich:

  • passIf
  • passIfNot
  • passIs
  • PassIsNot

Pass, wenn ...

Angenommen, ein Objekt soll nur dann an die weitere Verarbeitung übergeben werden, wenn es größer als 5 ist.

10.times.passIf( cur > 5 ).print

Die "times"-Schleife zählt hier von 1 bis 10. Die Funktion "passIf" prüft jedes Objekt und lässt nur diejenigen durch, welche größer als 5 sind.

"passIfNot" prüft hier die Umkehrung, also ob die Abfrage nicht zutreffend ist.

Pass, aber nur dieses und jenes!

Mit "passIs" werden nur ausgewählte Objekte an die weitere Verarbeitung übergeben.

10.times.passIs( 3,5,6,9 ).print

Times zählt auch hier von 1 bis 10, wobei allerdings nur die zahlen 3,5,6 und 9 zum "print" weitergereicht werden.

Umgekehrt lässt sich ebenso filtern, was nicht weitergegeben werden soll:

10.times.passIsNot( 3,5,6,9 ).print

Hier wird alles zu "print" weiter gereicht, was nicht mit den angegebenen Zahlen überein stimmt. Somit werden nur die Zahlen 1,2,4,7,8 und 10 ausgegeben.

Abbruch

Ähnlich zu den vorherigen Pass-Funktionen existieren noch Break-Funktionen, mit denen die weitere Verarbeitung einer Schleife abgebrochen werden kann.

  • breakAt / breakIs
  • breakAtNot / breakIsNot
  • breakIf
  • breakIfNot

Diese Funktionen verhalten sich ähnlich zu den Pass-Funktionen, allerdings wird die aktuelle Schleife im zutreffenden Fall abgebrochen.

Mit all diesen Funktionen lässt sich ein Filter aufbauen, wo nur die gewünschten Objekte weiter verarbeitet werden:

l = [4,3,9,0,5,2,1,7,2,6,4,0,8,2,5]
l.each.passIf( cur > 3 && cur < 8 ).breakAt( 6, 8 )
	it.print

In diesem Beispiel wird eine Liste durchlaufen, allerdings nur die Zahlen größer 3 und kleiner 8. Sollte eine 1 oder 6 dabei sein, wird die Verarbeitung unterbrochen.

Effektiv werden hier nur die Zahlen 4, 9, 5 und 7 verarbeitet. Danach wird durch die 6 die Verarbeitung unterbrochen.

- Powered by OghsWiki -

 

 

Unterstützen

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

Erhalten:  0 €