आप अपने कोड को पढ़ने वाले किसी व्यक्ति के लिए अपने इरादे को संप्रेषित करने के लिए अलग-अलग एक्सेसरों का उपयोग कर सकते हैं, और उन कक्षाओं को लिखना आसान बना सकते हैं जो सही ढंग से काम करेंगे चाहे उनके सार्वजनिक एपीआई को कैसे बुलाया जाए।
class Person
attr_accessor :age
...
end
यहाँ, मैं देख सकता हूँ कि मैं उम्र पढ़ और लिख सकता हूँ।
class Person
attr_reader :age
...
end
यहाँ, मैं देख सकता हूँ कि मैं केवल उम्र पढ़ सकता हूँ। कल्पना कीजिए कि यह इस वर्ग के निर्माता द्वारा निर्धारित किया गया है और उसके बाद स्थिर रहता है। यदि उम्र के लिए एक उत्परिवर्ती (लेखक) थे और वर्ग को यह मानते हुए लिखा गया था कि एक बार सेट होने पर, कोई बदलाव नहीं होता है, तो कोड बग से उस उत्परिवर्ती को बुला सकता है।
लेकिन पर्दे के पीछे क्या हो रहा है?
यदि आप लिखते हैं:
attr_writer :age
इसमें अनुवाद किया गया है:
def age=(value)
@age = value
end
यदि आप लिखते हैं:
attr_reader :age
इसमें अनुवाद किया गया है:
def age
@age
end
यदि आप लिखते हैं:
attr_accessor :age
इसमें अनुवाद किया गया है:
def age=(value)
@age = value
end
def age
@age
end
यह जानते हुए कि, इसके बारे में सोचने का एक और तरीका है: यदि आपके पास attr _... हेल्पर्स नहीं थे, और एक्सेसर्स को स्वयं लिखना था, तो क्या आप अपनी कक्षा की तुलना में किसी भी अधिक एक्सेसर्स को लिखेंगे? उदाहरण के लिए, यदि उम्र को केवल पढ़ने की आवश्यकता है, तो क्या आप इसे लिखने के लिए एक विधि भी लिखेंगे?