यह लेख एट्रिब्यूट एक्सेसर्स के बारे में है (attr_accessor
) रूबी में।
अगर आप जल्दी में हैं, तो नीचे स्क्रॉल करें।
क्योंकि मैं समझाकर शुरुआत करना चाहूंगा:
हम विशेषता एक्सेसर्स का उपयोग क्यों करते हैं !
मान लें कि आपके पास आवृत्ति चर के साथ एक वर्ग है और आप उन्हें बाहरी दुनिया में दिखाना चाहते हैं।
कैसे?
आपको एक विधि परिभाषित करनी होगी।
केवल विधियाँ ही आवृत्ति चरों तक पहुँच सकती हैं।
क्यों?
क्योंकि अगर आप ऐसा नहीं करते हैं तो आपको एक त्रुटि मिलेगी।
यहां एक उदाहरण दिया गया है :
class Food def initialize(protein) @protein = protein end end bacon = Food.new(21) bacon.protein # NoMethodError: undefined method `protein'
NoMethodError
जब आप protein
. का मान मांगते हैं तो आपको यह त्रुटि मिलती है उचित सेटअप के बिना।
समाधान क्या है?
आप अपनी स्वयं की पद्धति को इस प्रकार परिभाषित कर सकते हैं :
class Food def protein @protein end end bacon.protein # 21
अन्य ओओपी भाषाओं में इसे "गेट्टर" विधि के रूप में जाना जाता है। आप एक ऐसी विधि को परिभाषित करते हैं जो आपको आवृत्ति चर का मान देती है।
आप मान भी बदलना चाह सकते हैं।
उसके लिए, आपको किसी अन्य विधि की आवश्यकता होगी , इस तरह:
class Food def protein=(value) @protein = value end end bacon.protein = 25
कल्पना कीजिए कि आप ऑब्जेक्ट में एक पोर्टल खोल रहे हैं ताकि आप मान बदल सकें।
यह वही कर रहा है।
अब :
क्या इस तरह के तरीके को परिभाषित करने का कोई बेहतर तरीका है?
किसी तरह का शॉर्टकट पसंद है?
हाँ!
वहाँ
. है
वहीं attr_accessor
में आता है।
रूबी attr_accessor उदाहरण
आप रूबी को attr_accessor
. के साथ इन तरीकों को बनाने के लिए कह सकते हैं ।
यहां बताया गया है :
class Food attr_accessor :protein def initialize(protein) @protein = protein end end
इस पंक्ति को देखें :
attr_accessor :protein
यह एक रूबी विधि है जो आपके लिए अन्य विधियाँ बनाती है।
कौन से तरीके?
इस उदाहरण के लिए, यह बनाता है:
protein
protein=
ये वही तरीके हैं जो हमने पहले बनाए थे…
लेकिन अब आपको उन्हें टाइप करने की ज़रूरत नहीं है।
यह एक शॉर्टकट है!
attr_accessor बनाम attr_reader
इसके अलावा attr_accessor
, आपके पास अन्य प्रकार के एक्सेसर्स भी हैं।
उनमें से तीन सटीक होने के लिए :
attr_accessor
attr_reader
attr_writer
उनके बीच क्या अंतर हैं?
खैर, attr_accessor रीडर और राइटर दोनों तरीके बनाता है।
attr_reader
केवल पाठक बनाता है।-
attr_writer
केवल लेखक बनाता है।
दूसरे शब्दों में :
attr_reader
. के साथ आप केवल मान पढ़ सकते हैं, लेकिन इसे बदल नहीं सकते। attr_writer
. के साथ आप केवल एक मान बदल सकते हैं लेकिन उसे पढ़ नहीं सकते।
एकाधिक आवृत्ति चर
एकाधिक विशेषता विधियों को परिभाषित करना चाहते हैं?
आप यह कर सकते हैं।
लेकिन आपको सही सिंटैक्स का उपयोग करना होगा।
इसे पसंद करें :
attr_reader :name, :value, :ready?
आप जितने चाहें उतने बना सकते हैं।
वीडियो ट्यूटोरियल देखें
सारांश
आपने रूबी में एट्रिब्यूट एक्सेसर्स के बारे में सीखा है! 3 विधियों का एक सेट (attr_accessor
, attr_writer
&attr_reader
) कक्षा के बाहर से आवृत्ति चरों तक पहुँचने और सेट करने के लिए।
अब अभ्यास करने का समय है।