Ich habe Ihre Frage dahingehend beantwortet, warum Sie die Sprache nicht so gestalten, dass überhaupt keine Konvention erforderlich ist. Mit anderen Worten, warum erzwingt Scala nicht immer die Verwendung von Klammern, anstatt Programmierern zu erlauben, sie manchmal wegzulassen?
Die Antwort liegt in der referenziellen Transparenz . Wenn eine Funktion keine Nebenwirkungen hat, kann ein Funktionsaufruf im Wesentlichen durch das Ergebnis ersetzt werden, ohne das Verhalten des Programms zu ändern.
Das heißt, eine Funktion ohne Parameter oder Nebenwirkungen entspricht semantisch dem valHalten des Rückgabewerts dieser Funktion. Aufgrund dieser Eigenschaft kann der Programmierer im Verlauf der Entwicklung einer Klasse zwischen der Verwendung einer valoder einer Funktion wechseln , je nach Zweckmäßigkeit oder Effizienz.
Da Sie die Klammern weglassen können, bedeutet dies, dass Code, der so etwas aufruft, queue.sizenicht wissen oder sich darum kümmern muss, ob sizees sich um eine Funktion oder eine handelt val. Dem Implementierer der QueueKlasse steht es daher frei, zwischen den beiden zu wechseln, ohne den aufrufenden Code ändern zu müssen (obwohl ich glaube, dass er neu kompiliert werden muss). Es stabilisiert die öffentliche Schnittstelle der Klasse. Zum Beispiel könnten Sie a beginnen, queue.sizeindem Sie sizeeinen Basiswert aufrufen List, der möglicherweise ist O(n), und dann aus Effizienzgründen sizezu a wechseln val.
Die Konvention schlägt die Klammern vor, wenn Nebenwirkungen auftreten, um zu verdeutlichen, dass dieses Klassenmitglied definitiv ein Funktionsaufruf ist und daher möglicherweise nicht referenziell transparent ist. Für das Aufrufen von Code ist es wichtig zu wissen, ob Nebenwirkungen auftreten, damit sie nicht wiederholt aufgerufen werden. Wenn es Ihnen egal ist, ob es sich um eine Funktion handelt oder nicht, können Sie sie genauso gut behandeln, als ob dies nicht der Fall wäre.