Reaktive Zustandsmaschine

Nachdem Sie vor 5 Jahren nach einer geeigneten Lösung in RxJs, Beacon, ... etc.js gesucht und bei flyd.js angehalten und 4-6 Projekte mit nur drei Funktionen aus dem Stream geschrieben haben, kombinieren Sie die Bibliothek . Der Rest war arbeitslos, ich wollte die Leichtigkeit des Bündels. So erschien alak , die ersten Versionen vor 0.3 waren nur 20-30 Zeilen und ersetzten flyd komplett.

Ein Jahr später erschien Version 0.4 bereits 72 Zeilen mit Pattern Matching und Mix (analog von Mähdrescher aus Flyd oder berechnet aus Vue). Nach drei Jahren und Dutzenden von Projekten gab es ein Gefühl der Güte, Erfahrungsaustausch und Release 1.0.



Fantasieland


Ein scharfes Eintauchen in die FRP eines Menschen sein ganzes Leben lang, wenn er ein klassisches OOP aus einem Lehrbuch schreibt, kann seinen Kopf wie ein scharfes Eintauchen in eine Tiefe außerhalb der Bathyscaphe sprengen . Ich habe mehrere Wochen gebraucht, um mich mit dem Gedanken an Funktionen anstelle von Variablen vertraut zu machen. Drei Monate später bewunderte ich das reaktive Diagramm der Anwendung bereits vollständig - das Programm kann als Adern oder Wurzeln / Zweige eines Baumes angesehen werden. Ich denke, ein einfaches Interesse an alten Sprachen wie Sanskrit und die Liebe zu den Elfen Quenia haben mir geholfen. Das Blasen der Ohren beim Einklemmen der Nase ist die Grundkompetenz eines Tauchers. Erfolgreiche klassische OOP-Programmierer müssen ihre immersiven Wissensfähigkeiten abstauben. Nichts kann den erfahrenen Funktionalisten helfen, aber vielleicht helfen sie uns, die vorhandenen Formen und Fackelbeschreibungen zu überwinden.

Unbekannte Namen


In der Philosophie wird die Monade das Grundteilchen des Universums genannt - ein Teilchen Gottes, ein eher niedriges Konzept. In den Spezifikationen des Fantasielandes und im allgemeinen Verständnis von FRP ist eine Monade etwas Höheres, das einen Funktor enthält. Wikipedia hat zwei Definitionen von Funktoren im allgemeinen und im OCaml-Kontext. Im Kontext von alak ist der grundlegende Partikelfunktor eine Funktion, die Daten enthält. Wenn diese geändert werden, werden die zugehörigen Funktionen / Funktoren aktualisiert. Alles ist wie in Excel-Tabellen.



In bacon.js wird dies als " atomare Updates " bezeichnet, RxJs jedoch nicht.

In alak könnte der Code folgendermaßen aussehen:

import A from 'alak' //    -    alak const userId = A.flow(); //         const followers = A.flow(); const profile = A.flow(); const tweets = A.flow(); //  userId -> profile  getProfile const getProfile = id => api.getProfile(id).then(profile); userId.up(getProfile); //   userId.up(id => { api.getFollowers(id).then(followers) api.getTweets(id).then(tweets); }); 

FĂĽhren Sie auf Codesandbox aus
Das Ändern der Benutzer-ID führt zu einer reaktiven Änderung der Follower , des Profils und der Tweets .

Alles um anzufangen


Jede Verwendung des Alak-Funktors basiert auf der Fähigkeit, in Flüssen zu denken, wie in Go, aber beim Lesen aus einem Kanal, dem gesamten Salz beim Erstellen eines Diagramms mit mehreren Verbindungen / Kanten, nehmen die Hörer eines Streams nicht ab.

Selbst in angle.js war dies genug, um den Zustand jenseits von Komplexität und Komplexität auf wundervolle Weise aufzulösen. Das Kreuz auf Angular2 war für mich das Auferlegen von RxJS mit zweifelhafter Reaktivität. Als ich ReduX sah, hatte ich das Gefühl, zwei Schritte zurück zur Implementierung von PureMVC zu gehen .

In diesem Beitrag fordere ich Sie, wie viele moderne Redner, auf, das prozedurale Denken und die Belastung durch OOP-Muster fallen zu lassen und sich dem menschlichen / literarischen Code zuzuwenden. Alak ist heute ziemlich gut darin, den reaktiven Graphen des Stapels deklarativ zu beschreiben.

Wir halten die Reaktivität (jsx / svelte / html Template Engines) für selbstverständlich.
- Warum haben wir nicht die gleiche Reaktivität in den Läden?

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


All Articles