Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Funktionale Programmierung / Daten-Feeds

Feeds verketten

Der wahre Wert von Feeds zeigt sich, wenn Sie mehrere Stufen haben. Jedes ==> reicht sein Ergebnis an die nächste Operation weiter, eine ganze Pipeline liest sich also von oben nach unten in der Reihenfolge, in der die Arbeit geschieht:

(1..10)
    ==> grep(* %% 2)
    ==> map(* ** 2)
    ==> my @result;

say @result; # [4 16 36 64 100]

Folgen Sie den Daten die Seite hinunter: beginne mit 1..10, behalte die geraden Zahlen, quadriere jede davon und sammle das Ergebnis. Die geraden Zahlen sind 2, 4, 6, 8, 10, und ihre Quadrate sind 4, 16, 36, 64, 100.

Als Methodenkette geschrieben ist dieselbe Pipeline (1..10).grep(* %% 2).map(* ** 2) — und die liest sich genau wie der Feed von links nach rechts. Eine Methodenkette ist nicht von innen nach außen; sie führt ihre Stufen in genau derselben Reihenfolge aus. Die Form, die sich wirklich von innen nach außen liest, ist das Verschachteln der Operationen als gewöhnliche Funktionen, map(* ** 2, grep(* %% 2, 1..10)), wo Sie beim innersten Aufruf anfangen und sich nach außen arbeiten müssen.

Ein Feed ist also kein Weg, von-innen-nach-außen-Code zu entkommen — er ist eine andere Schreibweise einer Pipeline von links nach rechts. Was er hinzufügt, ist die Anordnung: Jede ==>-Stufe darf in einer eigenen Zeile stehen, und derselbe Operator funktioniert gleichermaßen für Schritte im Methoden- wie im Funktionsstil, was eine lange Pipeline gut überschaubar hält. Feeds und Methodenketten erledigen letztlich dieselbe Arbeit; wählen Sie, was eine bestimmte Umformung am klarsten macht.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Quiz — Der Feed-Operator   |   Quiz — Feeds


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.