禅第一
古典的なIterator 'GoF実装のプッシュバージョンが表示されます。 したがって、詳細については説明せずに、これについてすでに書いています。
読むのが面倒な人のための簡単な改作
この距離では、プッシュシステムとプルシステムの違いがはっきりと見えます。 このようなインスピレーションの後、各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つのプロセス」によれば、設計の「出発点」となるのは関数(クラス、抽象クラス、インターフェイスなど)ではありません。
私はそれをすべて持っています。