そもそも、慣習の必要性を防ぐために言語を設計してみませんか?言い換えると、なぜScalaは、プログラマーが括弧を省略できるようにするのではなく、括弧を常に強制的に使用しないのですか?
答えは参照透過性にあります。基本的に、関数に副作用がない場合、プログラムの動作を変更せずに、関数呼び出しをその結果に置き換えることができます。
つまり、パラメータや副作用val
のない関数は、その関数の戻り値を保持することと意味的に同等です。この特性のため、クラスが進化するにつれて、プログラマーはval
、利便性または効率性に応じて、aの使用と関数の使用を切り替える場合があります。
括弧を省略できるので、のようなものを呼び出すコードは、関数またはであるqueue.size
かどうかを知る必要も、気にする必要もありません。したがって、クラスの実装者は、呼び出しコードを変更する必要なく、2つの間を自由に変更できます(ただし、再コンパイルが必要になると思います)。クラスのパブリックインターフェイスを安定させます。たとえば、潜在的なであるを呼び出すことから始めて、効率上の理由からに変更することができます。size
val
Queue
queue.size
size
List
O(n)
size
val
このクラスメンバーは間違いなく関数呼び出しであるため、参照可能に透過的ではない可能性があることを明確にするために、副作用がある場合は、この規則により括弧が提案されます。コードを呼び出す際には、副作用が発生するかどうかを知ることが重要です。副作用が繰り返し発生するのを防ぐことができます。関数であるかどうかを気にしない場合は、そうでない場合と同様に扱うことができます。