リアクティブプログラミング

http://system.blog.uuum.jp/entry/%E3%83%AA%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%B8%E3%81%AE%E7%90%86%E8%A7%A3%E3%81%8C%E3%82%A4%E3%83%9E%E3%82%A4%E3%83%81%E3%81%A0%E3%81%A3
Excelがまさにリアクティブなアプリケーションである。
たとえば、セルA1にセルB1、セルC1の合計を表示するように設定しておけば、ユーザはセルB1、セルC1の値が変化したときにどのような命令が実行されてセルA1が更新されるかのかを意識する必要がない。
またセルA2にセルA1*10の値を表示するように設定しておけば、上と同時にセルA2も更新される。
このような、あるコントロールの値を「宣言的に」記述していき、コーディングを行う際にはその表示更新方法を意識する必要のないプログラムパラダイムを、リアクティブを呼ぶ。
値の変更を伝播させる、値の関係性を記述するというのがポイント。
その性質上、データソースは単なる値コンテナではなく、より抽象化された「非同期データストリーム」になる。(時間に沿って次々にイベントが発生していくもの)
React.js, Rx.jsなどがその実装。



従来の手法でこれを実現しようとすると、Observerパターンを利用する(イベントハンドラに更新処理を書く)ことになるが監視するコントロールが多くなったり、その関連性が多くなったりすと、プログラムが複雑になりすぎて、動作パターンの見落としや矛盾した動作が発生する。
リアクティブプログラミングは、それを解決する。

内部ではコントロール同士の依存グラフやキャッシュを持って効率よく表示更新をできるようになっているが、その方法はリアクティブプログラミングの利用者から見ると隠蔽されており、意識する必要は無い。