Drei Zen-reaktive Erweiterungen

" Reactive Extensions " ist mehr als ein Framework. Zumindest, weil es für jedes beliebte YP eine nahezu identische Implementierung gibt (angepasst an die spezifischen Sprachfunktionen und die entsprechenden Optimierungspraktiken). Yesenin behauptet, dass "der Große aus der Ferne gesehen wird". In dieser Notiz werde ich mich auf verschiedene "Entfernungen" zurückziehen und beschreiben, was ich sehe.

Zen zuerst


Ich sehe eine Push-Version des klassischen Iterators 'eine GoF-Implementierung. Ich habe daher bereits ohne Details darüber geschrieben.

Eine kurze Nacherzählung für diejenigen, die zu faul zum Lesen sind
Der Punkt ist, dass Observer ein (fast) "Spiegelbild" der klassischen Implementierung von Iterator ist. Warum "fast" - erklärt in einem Beitrag auf dem zuvor angegebenen Link. Wichtiger Hinweis: „Spiegelreflexion“ ist eine mathematische Definition ohne fünf Minuten und kann streng formalisiert werden .

In dieser Entfernung ist der Unterschied zwischen Push- und Pull-Systemen deutlich sichtbar. Nach einer solchen Inspiration verursacht jeder Git Push und Git Pull fast ehrfürchtige Ehrfurcht. Sie beginnen, im Code zu stöbern und heilige Fragen zu Duals zu stellen.

Zen Sekunde


"Etwas geht weiter" (nächste Methode), "etwas endete" (abgeschlossene Methode), "alles lief schief" (Fehlermethode) - drei Aussagen, die jeden Prozess beschreiben können, der sich im Laufe der Zeit entwickelt. Darüber hinaus ist es leicht, von der physischen Zeit zu abstrahieren und sie durch eine „Folge von Zuständen“ zu ersetzen (in denen sich das System befindet). Mit Rx können Sie eine Vielzahl von Algorithmen auf eine einzige Schnittstelle reduzieren (im Sinne einer "Übereinstimmung" des Programmierers mit anderen Programmierern und vor allem mit der Maschine), ohne die Ausdruckskraft (Anzahl der möglichen Zustände) oder (optional: synchron) einzuschränken , asynchrone oder Multithread-Ausführung).

Daraus folgt die wichtigste Schlussfolgerung: Ein Empfang ist ein Prozess. Und wenn ein komplexer Prozess aus n Unterprozessen besteht, dann ... ein RX "höherer Ordnung", der die Operation von N RX "erster Ordnung" steuert. In Analogie zu Funktionen höherer Ordnung .

Zen Dritter


In Analogie zu Funktionen? Ja, Funktionen. Die letzte und mächtigste Erkenntnis ist, dass rx nur die Dekoration eines Funktionsprogrammierers ist, nicht mathematisch: Letztere leben außerhalb der Zeit; Eine reguläre Funktion kann ein Ergebnis zurückgeben. nur einmal. Und als nächstes (Ergebnis); - Dies ist eine "wiederverwendbare" Version der Rückgabe. Daher die wichtigste Schlussfolgerung: Alles, was mit mathematischen (reinen) und gewöhnlichen OOP-Funktionen (einschließlich Currying , Komposition und vielem mehr, dem dieser Aufsatz nicht gewidmet ist) gemacht werden kann, kann mit rx gemacht werden. Funktionen sind blockierend und asynchron: auch rx. Funktionen können Funktionen zurückgeben: rx auch. Funktionen können rekursiv sein: auch rx. Funktionsberechnungen können zwischengespeichert werden: auch in rx.
Es ist merkwürdig, dass Sie in dieser Phase des Verstehens unfreiwillig zur ... funktionalen Programmierung zurückkehren. Nicht aus Gründen der Aussagekraft, nicht aus Gründen der Immunität - dies sind alles (optionale) Boni. Im "Funktionalen", weil es gezwungen ist, in Funktionen und deren Zusammensetzung zu denken; und nach dem unveränderlichen Gesetz „ein Empfang ist ein Prozess“ werden Funktionen (keine Klassen, abstrakten Klassen, Schnittstellen oder was auch immer) zum „Ausgangspunkt“ im Design.

Ich habe alles

Source: https://habr.com/ru/post/de441452/


All Articles