Vous pouvez utiliser les différents accessors pour communiquer votre intention à quelqu'un lisant votre code, et rendre plus facile l'écriture de classes qui fonctionneront correctement peu importe comment leur API publique est appelée.
class Personne
attr_accessor :age
...
end
Ici, je peux voir que je peux à la fois lire et écrire l'âge.
class Personne
attr_reader :age
...
end
Ici, je peux voir que je ne peux que lire l'âge. Imaginez que celui-ci soit défini par le constructeur de cette classe et reste constant par la suite. Si un mutateur (écrivain) pour l'âge existait et que la classe était écrite en supposant que l'âge, une fois défini, ne change pas, alors un bogue pourrait résulter de l'appel de ce mutateur par du code.
Mais que se passe-t-il en coulisses?
Si vous écrivez:
attr_writer :age
Cela se traduit par:
def age=(valeur)
@age = valeur
end
Si vous écrivez:
attr_reader :age
Cela se traduit par:
def age
@age
end
Si vous écrivez:
attr_accessor :age
Cela se traduit par:
def age=(valeur)
@age = valeur
end
def age
@age
end
Sachant cela, voici une autre façon de voir les choses : Si vous n'aviez pas les helpers attr_... et deviez écrire les accessors vous-même, écririez-vous plus d'accessors que votre classe n'en a besoin ? Par exemple, si l'âge avait seulement besoin d'être lu, écririez-vous aussi une méthode permettant de l'écrire ?
2 votes
Possible duplicate de Qu'est-ce que attr_accessor en Ruby?