Anda dapat menggunakan pengakses yang berbeda untuk mengomunikasikan niat Anda kepada seseorang yang membaca kode Anda, dan membuatnya lebih mudah untuk menulis kelas yang akan bekerja dengan benar tidak peduli bagaimana API publik mereka dipanggil.
class Person
attr_accessor :age
...
end
Di sini, saya dapat melihat bahwa saya dapat membaca dan menulis usia.
class Person
attr_reader :age
...
end
Di sini, saya dapat melihat bahwa saya hanya dapat membaca umur. Bayangkan bahwa itu diatur oleh konstruktor dari kelas ini dan setelah itu tetap konstan. Jika ada mutator (penulis) untuk usia dan kelas ditulis dengan asumsi usia itu, setelah diatur, tidak berubah, maka bug dapat dihasilkan dari kode yang memanggil mutator itu.
Tapi apa yang terjadi di balik layar?
Jika Anda menulis:
attr_writer :age
Itu diterjemahkan ke dalam:
def age=(value)
@age = value
end
Jika Anda menulis:
attr_reader :age
Itu diterjemahkan ke dalam:
def age
@age
end
Jika Anda menulis:
attr_accessor :age
Itu diterjemahkan ke dalam:
def age=(value)
@age = value
end
def age
@age
end
Mengetahui hal itu, inilah cara lain untuk memikirkannya: Jika Anda tidak memiliki pembantu, dan harus menulis sendiri para pengakses, apakah Anda akan menulis pengakses yang lebih banyak dari yang dibutuhkan oleh kelas Anda? Misalnya, jika usia hanya perlu dibaca, apakah Anda juga menulis metode yang memungkinkannya untuk ditulis?