Trois extensions réactives zen

Les " extensions réactives " sont plus qu'un cadre. Du moins parce qu'il existe une implémentation presque identique (ajustée pour les fonctionnalités spécifiques du langage et les pratiques d'optimisation correspondantes) pour chaque PJ populaire. Yesenin affirme que «le grand est vu à distance». Dans cette note, je vais me retirer sur différentes "distances" et décrire ce que je vois.

Zen d'abord


Je vois une version push du classique Iterator 'a GoF. J'ai donc déjà écrit à ce sujet sans détails.

Un bref récit pour ceux qui sont trop paresseux pour lire
Le fait est que Observer est une (presque) «image miroir» de l'implémentation classique d'Iterator. Pourquoi "presque" - expliqué dans un article sur le lien donné précédemment. Remarque importante: la «réflexion miroir» est une définition mathématique sans cinq minutes et elle peut être formalisée strictement .

À cette distance, la différence entre les systèmes de poussée et de traction est clairement visible. Après une telle inspiration, chaque git push et git pull provoque une crainte presque révérencieuse. Vous commencez à fouiller autour du code et posez des questions sacrées sur les duels.

Zen seconde


«Quelque chose continue» (méthode suivante), «quelque chose de terminé» (méthode terminée), «tout s'est mal passé» (méthode d'erreur) - trois énoncés qui peuvent décrire tout processus qui se développe au fil du temps. De plus, il est facile de faire abstraction du temps physique en le remplaçant par une «séquence d'états» (dans laquelle se trouve le système). Rx vous permet de réduire une grande variété d'algorithmes à une seule interface (dans le sens d'un "accord" du programmeur avec d'autres programmeurs et, plus important encore, avec la machine), sans imposer aucune restriction sur l'expressivité (le nombre d'états possibles) ou sur (facultatif: synchrone , asynchrone ou multithread).

La conclusion la plus importante en découle: un rx est un processus. Et si un processus complexe se compose de n sous-processus, alors ... un rx "d'ordre supérieur", qui contrôle le fonctionnement de n rx "de premier ordre". Par analogie avec les fonctions d'ordre supérieur .

Zen troisième


Par analogie avec les fonctions? Oui, les fonctionnalités. Le dernier et le plus puissant aperçu est que rx n'est que la décoration d'une fonction - programmeur, pas mathématique: ces derniers vivent hors du temps; une fonction régulière est capable de renvoyer un résultat; une seule fois. Et ensuite (résultat); - Il s'agit d'une version de retour "réutilisable". D'où la conclusion la plus importante: tout ce qui peut être fait avec des fonctions OOP mathématiques (pures) et ordinaires (y compris le curry , la composition , et bien plus encore, auquel cet essai n'est pas consacré) peut être fait avec rx. Les fonctions sont bloquantes et asynchrones: rx aussi. Les fonctions peuvent renvoyer des fonctions: rx aussi. Les fonctions peuvent être récursives: rx aussi. Les calculs de fonction peuvent être mis en cache: dans rx aussi.
Il est curieux qu'à ce stade de la compréhension, vous reveniez involontairement à ... la programmation fonctionnelle. Pas pour des raisons de déclaration, pas pour des raisons d'immunité - ce sont tous des bonus (facultatifs). Dans le "fonctionnel" car il est contraint de penser en termes de fonctions et de leurs compositions; et selon la loi immuable «un rx est un processus», ce sont les fonctions (pas les classes, les classes abstraites, les interfaces ou autre) qui deviennent le «point de départ» de la conception.

J'ai tout.

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


All Articles