Acerca de Variables de instancia
Puntos clave:
- Cuando se llama al método
.new de una clase para crear una instancia de objeto, al método .initialize se le pasan todos los argumentos para inicializar el estado de la instancia.
- Los nombres de las variables de instancia llevan el prefijo
@.
- Las variables de instancia valen
nil por defecto hasta que se establecen explícitamente.
- Las variables de instancia son privadas por defecto y deben manipularse con getters y setters
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- Los métodos con un
= al final son reconocidos por Ruby como setters 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 que hay 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 esto lo llamamos «typo») en el ejemplo anterior (por ejemplo,
@ownar), fallaría en silencio, lo que podría introducir un bug en el sistema.
- Los getters y setters hacen que esto sea explícito y lanzarán un error cuando se cometa un error tipográfico.
Referencias
Inicialización de instancias de objeto
Variables de instancia