Vous pouvez utiliser les différents accesseurs pour communiquer votre intention à quelqu'un qui lit votre code et faciliter l'écriture de classes qui fonctionneront correctement quel que soit le nom de leur API publique.
class Person
attr_accessor :age
...
end
Ici, je peux voir que je peux lire et écrire l'âge.
class Person
attr_reader :age
...
end
Ici, je peux voir que je ne peux lire que l'âge. Imaginez qu'il soit défini par le constructeur de cette classe et qu'ensuite il reste constant. S'il y avait un mutateur (écrivain) pour l'âge et que la classe était écrite en supposant que l'âge, une fois défini, ne change pas, un bogue pourrait résulter du code appelant ce mutateur.
Mais que se passe-t-il en coulisses?
Si vous écrivez:
attr_writer :age
Cela se traduit par:
def age=(value)
@age = value
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=(value)
@age = value
end
def age
@age
end
Sachant cela, voici une autre façon de penser: si vous n'aviez pas les assistants attr _... et deviez écrire les accesseurs vous-même, écririez-vous plus d'accesseurs que votre classe n'en avait besoin? Par exemple, si l'âge devait seulement être lu, écririez-vous également une méthode permettant de l'écrire?