私は、並行プログラミングにおける Java に対する Scala の利点を比較してきました。
明らかに私が最初に気づいた点は、Scala は関数型プログラミング言語であり (部分的に) FP を使用すると、副作用が自然に回避されるということです。
命令型言語と比較して、関数型プログラミングで副作用がどのように回避され、マルチスレッド/並行プログラミングでどのように機能するか?
私は、並行プログラミングにおける Java に対する Scala の利点を比較してきました。
明らかに私が最初に気づいた点は、Scala は関数型プログラミング言語であり (部分的に) FP を使用すると、副作用が自然に回避されるということです。
命令型言語と比較して、関数型プログラミングで副作用がどのように回避され、マルチスレッド/並行プログラミングでどのように機能するか?
このステートメントが意味することは、関数型オブジェクト指向ハイブリッド言語としての Scala は、副作用のない関数型構造と規則の使用を奨励する(場合によっては可能にする) ということです。副作用のある機能しないステートフルな Scala コードを十分に書くことができます;-) 一方、機能的な Java (たとえば) を書こうとすることはできますが、関数は最初のクラスのオブジェクトではないため、見苦しく見えるかもしれません。だから私はそれが自然にそうするとは言いませんが、いくつかの方法であなたを助け、全体的にそうするように促します.
関数型プログラミングを行う際に従うべき原則がいくつかあります。これにより、結果として副作用がなくなります。
実際、上記のルールに従うことで副作用を回避することの最大のメリットの 1 つは、並行プログラミングが容易になることです。並行プログラミングにおける最大のハードルは、結局のところ、共有状態の管理です!
ルールの 1 つは、変更可能で共有された状態が悪いということなので、使用しないでください。代わりに、多くの関数型言語 (Erlang や Scala など) は、アクター (スレッドと比較できます) が互いにメッセージを送信することによってのみ通信する、いわゆるアクター モデルを好みます (値をどこかに保存する代わりに渡すことを参照してください!)。