スリーゼンリアクティブエクステンション

Reactive Extensions 」は単なるフレームワークではありません。 人気のある各言語に対してほぼ同一の実装(特定の言語および対応する最適化プラクティスに合わせて調整)があるためだけの場合。 イェセニンは「大きなものは遠くから見られる」と主張しています。 このメモでは、異なる「距離」に後退し、私が見ているものを説明します。



禅第一



古典的なIterator 'GoF実装のプッシュバージョンが表示されます。 したがって、詳細については説明せずに、これについてすでに書いています。



読むのが面倒な人のための簡単な改作
要点は、 ObserverがIteratorの古典的な実装の(ほぼ)「鏡像」であることです。 なぜ「ほぼ」-以前に与えられたリンクの投稿で説明されています。 重要な注意:「鏡面反射」は5分間の数学的定義であり、 厳密形式化できます。



この距離では、プッシュシステムとプルシステムの違いがはっきりと見えます。 このようなインスピレーションの後、各git pushおよびgit pullはほとんどalmost敬の念を引き起こします。 あなたはコードを探し回り、双対について神聖な質問をし始めます。



禅秒



「何かが続く」(次の方法)、「何かが終わった」(完了した方法)、「すべてがうまくいかなかった」(エラーの方法)-時間とともに発展するプロセスを説明できる3つのステートメント。 さらに、物理的な時間から抽象化するのは簡単で、「状態のシーケンス」(システムが自身を見つける)に置き換えます。 Rxを使用すると、表現力(可能な状態の数)またはオン(オプション:同期)に制限を課すことなく、さまざまなアルゴリズムを単一のインターフェイス(プログラマと他のプログラマ、さらに重要なのはマシンとの「合意」という意味)に減らすことができます、非同期またはマルチスレッド)実行。



これから最も重要な結論は次のとおりです。1つのrxは1つのプロセスです。 そして、複雑なプロセスがn個のサブプロセスで構成されている場合は、... n rx "一次"の操作を制御する "高次"のrxが1つです。 高階関数との類推によって。



禅三



関数との類推で? はい、機能。 最後で最も強力な洞察は、rxは単なる関数の装飾であるということです。数学的なものではなく、プログラム的なものです。 通常の関数は結果を返すことができます; 一度だけ。 そして次(結果); -これはreturnの「再利用可能な」バージョンです。 したがって、最も重要な結論:数学(純粋)および通常のOOP関数( カリー化合成など 、このエッセイが当てはまらないものなど)で実行できるすべてのことは、rxで実行できます。 関数はブロッキングと非同期です:rxも。 関数は関数を返すことができます:rxも。 関数は再帰的です:rxも。 関数の計算はキャッシュできます:rxでも。

理解のこの段階で、思わず...関数型プログラミングに戻るのは不思議です。 宣言のためではなく、免疫のためでもない-これらはすべて(オプション)ボーナスです。 「機能的」では、機能とその構成の観点から考えることを余儀なくされるため。 不変の法則「1つのrxは1つのプロセス」によれば、設計の「出発点」となるのは関数(クラス、抽象クラス、インターフェイスなど)ではありません。



私はそれをすべて持っています。



All Articles