将来、プログラムを簡単に並列化できるようにします。
5 に答える
私はアイテムを不変にすることに焦点を当てています。不変オブジェクトを使用すると、「スレッドセーフ」オブジェクトよりもはるかに簡単にマルチスレッド コードについて推論できます。オブジェクトには、同期なしでスレッド間で渡すことができる 1 つの可視状態があります。これは、マルチスレッド プログラミングの考えを取り除きます。
興味があれば、私は不変オブジェクト、特にコード ギャラリーの不変コレクションに関する多くの作品を公開しています。プロジェクトの名前はRantPackです。私が持っているコレクションエリアでは
- ImmutableCollection<T>
- ImmutableMap<TKey,TValue>
- ImmutableAvlTree<T>
- ImmutableLinkedList<T>
- ImmutableArray<T>
- ImmutableStack<T>
- ImmutableQueue<T>
IList<T> や ICollection<T> などの BCL インターフェイスを実装するラッパー オブジェクトを生成する追加のシム レイヤー (CollectionUtility) があります。インターフェイスは不変であるため、インターフェイスを完全に実装することはできませんが、可能なすべてのメソッドが実装されています。
単体テストを含むソース コード (C#) もサイトで入手できます。
主にJavaでプログラミングしています。言語に閉鎖が追加される日を辛抱強く待っています. しかし、私はまだ Java 1.4.2 に固執しているので、それらが追加されたとしても、それは私には長い間当てはまらないでしょう!
そうは言っても、私の主な「関数型」プログラミング方法は、「final」キーワードを多用することです。できるだけ多くのクラスを完全に不変にし、残りのクラスは一時的なものと不変なものを明確に区別するようにしています。
これは rubyconf 2008 でのテーマに関する講演です。ほとんどが ruby 中心ですが、いくつかの概念は依然として有効です。
http://rubyconf2008.confreaks.com/better-ruby-through-functional-programming-2.html
メンバー変数またはグローバル変数を使用しないでください。関数/メソッドのローカル スタックを使用します。メソッドが内部スコープの変数と呼び出しパラメーターのみを使用し、out/inout/reference パラメーターまたは戻り値を使用してすべての情報を返す場合、そのメソッドは機能します。
すべてを非同期にします。不変オブジェクト、メッセージなどを使用します。キューを介して通信します。