最近、関数型プログラミングについて質問したところ、 (良い!) 回答が返ってきて、さらに多くの質問が寄せられました (学習の場合もそうであるように思われます)。以下にいくつかの例を示します。
1 つの回答は、不変データ構造の利点に言及しています。各スレッドは独自のコピーを持つことができます。私には、これはどちらかというとバージョン管理システムのように思えますが (類推すると)、誰かがチェックアウトしたコードをロックして他の人が変更できないようにするのではなく、誰もが自分のコピーをチェックアウトできます。いいですね。ただし、VCS では、2 人が同じものを変更した場合に備えて、変更を「マージ」するという概念があります。この問題は確かにマルチスレッドのシナリオで発生する可能性があるようです...では、スレッドが最新のデータを見ることが重要な場合、「マージ」はどのように行われるのでしょうか?
この回答では、オブジェクトのループで操作が実行されている場合と、古いオブジェクトを更新する代わりに毎回新しいオブジェクトを使用する方法について説明しました。ただし、
bankAccount
たとえば、GUI バンキング システムなど、非ループ シナリオで が更新されているとします。オペレーターが [金利の変更] ボタンをクリックすると、(C# などで) のようなイベントが発生しますbankAccount.InterestRate = newRateFromUser
。私はここで密集しているように感じますが、うまくいけば私の例は理にかなっています: オブジェクトが更新される何らかの方法が必要ですよね? 他にもいくつかのことが新しいデータに依存する場合があります。
とにかく、パラダイム シフトについて頭を悩ませるのを手伝ってくれたら、ありがたいです。コーディングへの単純な手続き型の命令型アプローチの背景を理解した後、OOP を学習するときに、私の脳が同様の「愚かな段階」を経験したことを覚えています。