1. ホーム
  2. scala

[解決済み] Scalaにおけるval-mutableとvar-immutableの比較

2022-11-09 20:41:46

質問

Scalaでは、可変コレクションでvalを使用する場合と、不変コレクションでvarを使用する場合のガイドラインはあるのでしょうか?それとも、本当に不変のコレクションでvalを目指すべきですか?

コレクションに両方のタイプがあるという事実は、私に多くの選択肢を与えてくれますが、しばしば私はその選択をする方法を知りません。 どのように選択したらよいのかわかりません。

どのように解決するのか?

よくある質問ですね、これは。難しいのは、重複しているものを見つけることです。

あなたが努力すべきなのは 参照透過性(referential transparency . これはどういうことかというと、もし私が "e" という式を持っているとしたら、それを val x = e と置き換えることができます。 ex . これはミュータビリティが壊れる性質です。設計上の判断が必要なときはいつでも、参照透過性を最大にすることです。

現実的な問題として、メソッドローカルの var は最も安全な var は、メソッドをエスケープしないので、存在する中で最も安全です。もしそのメソッドが短ければなおさらです。そうでない場合は、他のメソッドを抽出することでメソッドを減らすようにします。

一方、ミュータブルコレクションには の可能性があります。 があります。コードを変更するとき、それを他のメソッドに渡したり、返したりしたくなるかもしれません。これは、参照透過性を壊すようなものです。

オブジェクト(フィールド)では、ほとんど同じことが起こりますが、より悲惨な結果になります。どちらにしても、オブジェクトは状態を持ち、したがって参照透過性を壊します。しかし、変更可能なコレクションを持つことは、オブジェクト自体でさえ、誰がそれを変更しているかの制御を失うかもしれないことを意味します。