変数は不可変な方が良い
変数を不可変にする事の利点を知るには、変数を可変にする事の不利益を知らねばなりません。先ずは、変数を可変にする事により発生する問題について、例をあげて説明します。
例えば、ある変数を指定値分増加させる加算処理と、指定値分減少させる減算処理を同時に実行した場合を考えてみます。値の現在値が100の時に、指定値が30の加算処理と、指定値が50の減算処理が行われた場合、最終値は80でなければなりません。しかし、注意深く並行プログラミングを行わないと、最終値が130になったり、50になったりします(※他にも色々問題が生じますが長くなるので省略します)この望ましくない結果を防ぐには、同期処理などを行わなければなりませんが、その処理をプログラミングする際に、バグが発生する可能性があります。また、同期処理を行うと、パフォーマンスが下がります。
この問題の根源は、データが可変である事です。そもそも、データが変更できなければ、矛盾が生じません。プログラムのデータ(変数)を不可変にしておくと、問題が始めから生じないので、同期処理などを行う必要もなくなります。命令型プログラミングに慣れた方は、変数を不可変にしてプログラミングが出来ないと考えるかもしれませんが、やってみると意外と簡単です。例えば、.NETとJavaのString型は不可変です。それでもちゃんとプログラミング出来ている筈です。
もちろん銀の弾丸は存在しません。変数を不可変にするデメリットも存在します。それは、メモリ消費量が増加する事です。変数を不可変にすると、新たなインスタンスを生成する必要性が生じ、その分だけメモリ消費量が増加します。
変数を不可変にしておいて、必要なメモリ量が多くなりすぎた時に、改めて削減策を講じるとよいでしょう。