Sobre Variáveis de instância
Pontos-chave:
- Quando o método
.new de uma classe é chamado para criar uma instância de objeto, são passados todos os argumentos ao método .initialize para inicializar o estado da instância.
- Os nomes das variáveis de instância começam com
@.
- As variáveis de instância têm o valor predefinido
nil até serem definidas explicitamente.
- As variáveis de instância são privadas por predefinição e devem ser manipuladas com getters e setters.
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- Os métodos com um
= no fim são reconhecidos pelo Ruby como setters e permitem o uso do "açúcar" sintático da sintaxe de atribuição, por exemplo Backpack.new("Sven").owner = "Ayah".
Repara no espaço entre owner e =, enquanto o nome real do método é owner=.
- Os getters e setters podem ser criados com os métodos
attr_reader, attr_writer e attr_accessor:
-
attr_reader: Cria getters para os símbolos listados
-
attr_writer: Cria setters para os símbolos listados
-
attr_accessor: Cria getters e setters para os símbolos listados
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- Porquê usar getters e setters em vez da variável de instância diretamente?
- Se houvesse um erro tipográfico (a que chamamos "typo") no exemplo anterior (por exemplo
@ownar), falharia silenciosamente, podendo introduzir um bug no sistema.
- Os getters e setters tornam isto explícito e lançam um erro quando é cometido um erro tipográfico.
Referências
Inicializar instâncias de objetos
Variáveis de instância