Jedes Mal, wenn ich triviale Getter schreibe (Funktionen holen, die nur den Wert des Members zurückgeben), frage ich mich, warum Sprachen nicht einfach einen 'Nur lesen'-Zugriffsmodifikator haben, der es erlaubt, den Wert der Member des Objekts zu lesen erlaubt es nicht, sie genau wie const in C++ zu setzen.Warum haben OOP-Sprachen keinen Zugriffsmodifizierer, der nur gelesen werden kann?
Die privaten, geschützten, öffentlichen Zugriffsmodifikatoren bieten entweder vollen (Lese-/Schreib-) Zugriff oder keinen Zugriff.
Einen Getter zu schreiben und jedes Mal aufzurufen, ist langsam, weil das Funktionsaufrufen langsamer ist als nur auf ein Mitglied zuzugreifen. Ein guter Optimierer kann diese Getter-Aufrufe optimieren, aber das ist "Magie". Und ich denke nicht, dass es eine gute Idee ist zu lernen, wie ein Optimierer eines bestimmten Compilers funktioniert, und Code zu schreiben, um ihn zu nutzen.
Warum also müssen wir in der Praxis Accessoren schreiben, nur Schnittstellen lesen, wenn nur ein neuer Zugriffsmodifikator das tun würde?
PS1: Bitte sagen Sie nicht Dinge wie "Es würde die Kapselung brechen". Eine öffentliche foo.getX()
und eine öffentliche, aber nur lesen foo.x
würde das gleiche tun.
EDIT: Ich habe meinen Beitrag nicht klar geschrieben. Es tut uns leid. Ich meine, Sie können den Wert des Mitglieds außerhalb lesen, aber Sie können es nicht einstellen. Sie können den Wert nur innerhalb des Klassenbereichs festlegen.
Ihre ps1 macht die Annahme, dass ein Property Getter immer eine einfache Kapselung einer Feldvariablen ist, was nicht immer der Fall ist. Zum Beispiel könnte der Eigenschaften-Getter eine Berechnung sein, die mehrere Felder, eine Verkettung von Feldern usw. enthält. Der Eigenschaften-Getter kapselt die Logik und daher kann die interne Implementierung leicht geändert werden. –
Als Antwort auf Ihre Bearbeitung passt die Antwort von Marcelo Cantos perfekt zu Ihrem Bedarf. – BoltClock