Niyetinizi kodunuzu okuyan birine iletmek için farklı erişimcileri kullanabilir ve herkese açık API'larının adı ne olursa olsun doğru şekilde çalışacak sınıflar yazmayı kolaylaştırabilirsiniz.
class Person
attr_accessor :age
...
end
Burada hem yaşı okuyabilir hem de yazabilirim.
class Person
attr_reader :age
...
end
Burada, sadece yaşı okuyabileceğimi görebiliyorum. Bu sınıfın kurucusu tarafından kurulduğunu ve bundan sonra sabit kaldığını düşünün. Yaş için bir mutasyona (yazar) sahip olsaydı ve sınıf, o yaşın ayarlandıktan sonra değişmediği varsayılarak yazıldıysa, o mutatörü çağıran koddan bir hata ortaya çıkabilir.
Peki perde arkasında neler oluyor?
Eğer yazarsanız:
attr_writer :age
Bu tercüme:
def age=(value)
@age = value
end
Eğer yazarsanız:
attr_reader :age
Bu tercüme:
def age
@age
end
Eğer yazarsanız:
attr_accessor :age
Bu tercüme:
def age=(value)
@age = value
end
def age
@age
end
Bunu bilerek, bunu düşünmenin başka bir yolu var: Eğer attr _... yardımcılarına sahip değilseniz ve erişimcileri kendiniz yazmak zorundaysanız, sınıfınızın gerekenden daha fazla erişimci yazabilir misiniz? Örneğin, yalnızca yaşın okunması gerekiyorsa, yazılmasına izin veren bir yöntem de yazar mısınız?