À propos de Variables d'instance
Points clés :
- Quand la méthode
.new d'une classe est appelée pour créer une instance d'objet, la méthode .initialize reçoit tous les arguments qui servent à initialiser l'état de l'instance.
- les noms des variables d'instance sont préfixés par
@.
- les variables d'instance valent
nil par défaut tant qu'elles ne sont pas définies explicitement.
- les variables d'instance sont privées par défaut, et il convient de les manipuler avec des getters et des setters
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- Les méthodes dont le nom se termine par un
= sont reconnues comme des setters par Ruby, et permettent l'usage du « sucre syntaxique » de la syntaxe d'affectation, par exemple Backpack.new("Sven").owner = "Ayah".
Remarque l'espace entre owner et = alors que le nom réel de la méthode est owner=.
- On peut créer des getters et des setters avec les méthodes
attr_reader, attr_writer et attr_accessor :
-
attr_reader : crée des getters pour les symboles listés
-
attr_writer : crée des setters pour les symboles listés
-
attr_accessor : crée des getters et des setters pour les symboles listés
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- Pourquoi utiliser des getters et des setters plutôt que la variable d'instance directement ?
- S'il y avait une erreur typographique (on appelle ça une « typo ») dans l'exemple précédent (par exemple
@ownar), elle échouerait silencieusement, ce qui introduirait potentiellement un bug dans le système.
- Les getters et les setters rendent cela explicite, et lèvent une erreur en cas de typo.
Références
Initialiser des instances d'objet
Variables d'instance