Cada vez que escribo captadores triviales (obtengo funciones que simplemente devuelven el valor del miembro) me pregunto por qué los lenguajes no solo tienen un modificador de acceso de "solo lectura" que permitiría leer el valor de los miembros del objeto, pero no le permite configurarlas como cosas const en C++.¿Por qué los idiomas de oop no tienen un modificador de acceso de "solo lectura"?
Los modificadores privados, protegidos y de acceso público le otorgan acceso total (de lectura/escritura) o ningún acceso.
Escribir un captador y llamarlo siempre es lento, porque la invocación de funciones es más lenta que el simple acceso a un miembro. Un buen optimizador puede optimizar estas llamadas, pero esto es "mágico". Y no creo que sea una buena idea aprender cómo funciona un optimizador de un determinado compilador y escribir código para explotarlo.
Entonces, ¿por qué tenemos que escribir accesos, leer solo las interfaces en todas partes en la práctica cuando solo un nuevo modificador de acceso haría el truco?
ps1: por favor, no digas cosas como 'Rompería la encapsulación'. Un público foo.getX()
y un público pero de solo lectura foo.x
harían lo mismo.
EDITAR: No he compuesto mi publicación clara. Lo siento. Quiero decir que puedes leer el valor del miembro afuera pero no puedes configurarlo. Solo puedes establecer su valor dentro del alcance de la clase.
Su ps1 supone que un Property Getter es siempre una simple encapsulación de una variable de campo, que no siempre es el caso. Por ejemplo, el getter de propiedad puede ser un cálculo que incluye múltiples campos, una concatenación de campos, etc. El getter de propiedad encapsula la lógica y, por lo tanto, la implementación interna se puede cambiar fácilmente. –
En respuesta a su edición, la respuesta de Marcelo Cantos o la mía satisfarán su necesidad perfectamente. – BoltClock