यह लेख Ruby में एट्रिब्यूट एक्सेसर्स (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
अन्य OOP भाषाओं में इसे "गेटर" मेथड के रूप में जाना जाता है। आप एक मेथड परिभाषित करते हैं जो आपको इंस्टेंस वेरिएबल का मान देता है।
आप मान को बदलना भी चाह सकते हैं।
उसके लिए, आपको एक और मेथड की आवश्यकता होगी, जैसे यह वाला:
class Food def protein=(value) @protein = value end end bacon.protein = 25
कल्पना करें कि आप ऑब्जेक्ट में एक पोर्टल खोल रहे हैं ताकि आप मान को बदल सकें।
यही यह कर रहा है।
अब:
क्या इस तरह के मेथड को परिभाषित करने का कोई बेहतर तरीका है?
किसी शॉर्टकट की तरह?
हाँ!
वह है 🙂
यहीं attr_accessor आता है।
Ruby attr_accessor उदाहरण
आप attr_accessor के साथ Ruby को ये मेथड्स आपके लिए बनाने के लिए कह सकते हैं।
यहां कैसे:
class Food attr_accessor :protein def initialize(protein) @protein = protein end end
इस लाइन को देखें:
attr_accessor :protein
यह एक Ruby मेथड है जो आपके लिए अन्य मेथड्स बनाता है।
कौन से मेथड्स?
इस उदाहरण के लिए, यह बनाता है:
proteinprotein=
ये वही मेथड्स हैं जिन्हें हमने पहले बनाया था...
लेकिन अब आपको उन्हें टाइप नहीं करना पड़ता।
यह एक शॉर्टकट है!
attr_accessor बनाम attr_reader
attr_accessor के अलावा, आपके पास अन्य प्रकार के एक्सेसर्स भी हैं।
सटीक होने के लिए तीन:
attr_accessorattr_readerattr_writer
उनके बीच क्या अंतर हैं?
खैर, attr_accessor रीडर और राइटर दोनों मेथड्स बनाता है।
attr_readerकेवल रीडर बनाता है।-
attr_writerकेवल राइटर बनाता है।
दूसरे शब्दों में:
attr_reader के साथ आप केवल मान पढ़ सकते हैं, लेकिन इसे बदल नहीं सकते। attr_writer के साथ आप केवल मान बदल सकते हैं लेकिन पढ़ नहीं सकते।
एकाधिक इंस्टेंस वेरिएबल्स
कई एट्रिब्यूट मेथड्स परिभाषित करना चाहते हैं?
आप यह कर सकते हैं।
लेकिन आपको सही सिंटैक्स का उपयोग करना होगा।
इस तरह:
attr_reader :name, :value, :ready?
आप जितने चाहें उतने बना सकते हैं।
वीडियो ट्यूटोरियल देखें
सारांश
आपने Ruby में एट्रिब्यूट एक्सेसर्स के बारे में सीखा! 3 मेथड्स का एक सेट (attr_accessor, attr_writer और attr_reader) क्लास के बाहर से इंस्टेंस वेरिएबल्स को एक्सेस और सेट करने के लिए।
अब अभ्यास का समय है।