Readonly & const keywords

Readonly keyword

Es un modificador que indica que la asignación se puede hacer solamente en 2 lugares:

  • En declaración de la propiedad
  • En el constructor de la clase

Luego de la asignación la property será de solo lectura.

Veamos un ejemplo:

Tenemos 2 properties Readonly:

  1. Color → Asignación en la declaración, todos nuestros perros serán grises :p
  2. Birth → Asignación en el constructor

Hasta ahora no hay diferencias pero intentemos agregar un método para cambiar el color, porque no queremos que todos nuestros perros sean grises :p

Bien generemos el método ChangeColor() en nuestra clase Dog.

Bien el compilador ya se da cuenta que Color es una readonly property asique NOdeja que la modifiquemos fuera de la declaración o constructor.

Esto esta bueno cuando queremos propiedades que no sean modificadas por otras capas. Veamos un ejemplo cuando instanciamos la clase.

Constant keyword

Bien ahora hablemos un poco de constantes  este tipo de variable se comporta como una variable estática de la clase. Es decir es accesible a nivel clase y solo puede ser asignada en su declaración, luego NO se puede modificar.

Al momento que agregamos una variable const en una clase tenemos que asignarla en su declaración y su valor NO puede ser cambiando en ningún otro lado.

Veamos un ejemplo agreguemos un nuevo atributo a nuestra clase Dog, llamado Mood, es decir en esta variable vamos a setear el Estado de Ánimo de nuestros Perros.

Pero supongamos que nosotros por default vamos asignarles “Happy” a la propiedad Mood porque todos los perros son felices por definición. Podríamos hacer lo siguiente:

 Mood = “Happy”; 

en el constructor pero vayamos un paso más y saquemos ese hardcodeo. Generemos una constante a nivel de clase llamada: DefaultMood así la podemos reutilizar y si el día de mañana cambia el estado inicial de los perros solo lo cambiaremos en único lugar.

Nuestra clase quedaría finalmente así:

Si queremos instanciar la clase y modificar el valor del DefaultMood, el compilador nos dirá que es una constante y no se puede modificar su valor!

Resumen:

  1. Readonly: Solo se pueden asignar en la declaración de la variable o en el constructor de la clase. Luego ya NO se pueden modificar.
  2. Const: Solo se pueden asignar en la declaración de la variable y pertenecen a la clase (como static) NO son atributos de un objeto sino de la clase. NO se puede modificar su valor.

Saludos!
FM

PD: Codigo en github: https://github.com/morales-franco/JungleApp (Release 1)