Sobre Variáveis de instância
Pontos-chave:
- Quando o método
.new de uma classe é chamado para criar uma instância de objeto, o método .initialize recebe todos os argumentos para inicializar o estado da instância.
- Os nomes de variáveis de instância têm o prefixo
@.
- As variáveis de instância valem
nil por padrão até serem definidas explicitamente.
- As variáveis de instância são privadas por padrã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
- Métodos com um
= no final são reconhecidos pelo Ruby como setters e permitem o uso de "açúcar sintático" com a sintaxe de atribuição, por exemplo Backpack.new("Sven").owner = "Ayah".
Repare no espaço entre owner e =, enquanto o nome real do método é owner=.
- 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
- Por que usar getters e setters em vez da variável de instância diretamente?
- Se houvesse um erro de digitação (chamamos isso de "typo") no exemplo anterior (por exemplo,
@ownar), ele falharia silenciosamente e poderia introduzir um bug no sistema.
- Getters e setters tornam isso explícito e lançam um erro quando há um typo.
Referências
Inicializando instâncias de objeto
Variáveis de instância