Acerca de Variables de instancia
Puntos clave:
- Cuando se llama al método
.new de una clase para crear una instancia de objeto, se le pasan todos los argumentos al método .initialize para inicializar el estado de la instancia.
- Los nombres de las variables de instancia llevan el prefijo
@.
- Las variables de instancia tienen el valor
nil por defecto hasta que se les asigna un valor de forma explícita.
- Las variables de instancia son privadas por defecto, y se deben manipular con getters y setters.
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- Ruby reconoce como setters los métodos cuyo nombre termina en
=, y permiten el uso del «azúcar» sintáctico de la sintaxis de asignación, por ejemplo, Backpack.new("Sven").owner = "Ayah".
Fíjate en el espacio entre owner y =, mientras que el nombre real del método es owner=.
- Los getters y setters se pueden crear con los métodos
attr_reader, attr_writer y attr_accessor:
-
attr_reader: crea getters para los símbolos listados
-
attr_writer: crea setters para los símbolos listados
-
attr_accessor: crea getters y setters para los símbolos listados
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- ¿Por qué usar getters y setters en lugar de la variable de instancia directamente?
- Si hubiera un error tipográfico (a estos los llamamos «typos») en el ejemplo anterior (por ejemplo,
@ownar), fallaría en silencio y podría introducir un bug en el sistema.
- Los getters y setters hacen esto explícito, y lanzan un error cuando se comete un error tipográfico.
Referencias
Inicializar instancias de objeto
Variables de instancia