私は高度な関数型プログラミングのアイデアのいくつか、特に、不変データの操作方法については初めてです。多くの場合、データ構造は複合であり、より小さなデータ構造で構成されています。たとえば、世帯のすべてのメンバーで構成される家族コレクションがあるとします。家族を構築するかもしれません:
var flintstones = new Family().
add(new Member({name: 'Fred'})). //returns new instance of family
add(new Member({name: 'Wilma'}). // "
add(new Member({name: 'Pebbles'})); // "
var fred = flintstones.get({name: 'Fred'}).set({lname: 'Flintstone'});
flintstones = fred.family(); //new instance of family with latest fred.
fred
変更しても実際には変更されないことに注意してくださいflintstones
。への新しい参照を取得できますflintstones
が、何の目的でしょうか? すべてのオブジェクトは単なるスナップショットであるため、参照を保持する意味がわかりません。状態の変更は抽象化されているため、Observer パターンは使用しません。したがって、状態の変化を気にする GUI などの依存関係はどのように処理されるのでしょうか? 同期を維持するための観察に代わる機能的な方法は何ですか? 私は、オブジェクト自体が自分自身をレンダリングすることにビジネスを持っているとは考えていません。機能的なプログラムは、単一ページの Web アプリケーション GUI の状態を同期させるにはどうすればよいでしょうか?
Rich Hickey の講演は、私が関数型プログラミングを探求するきっかけになりました。私は彼の概念を理解していますが、実用的な実装 (JavaScript で) にジャンプするのに苦労しています。