रूबी में एक निजी विधि क्या है?
यह एक प्रकार की विधि है जिसे आप केवल उस वर्ग के अंदर से ही कॉल कर सकते हैं जहां इसे परिभाषित किया गया है।
यह आपको अपने तरीकों तक पहुंच को नियंत्रित करने की अनुमति देता है।
एक रूबी विधि हो सकती है :
- निजी
- सार्वजनिक (डिफ़ॉल्ट)
- संरक्षित
डिफ़ॉल्ट रूप से आपकी सभी विधियां public
हैं ।
कोई भी उनका उपयोग कर सकता है!
लेकिन आप एक विधि private
. बनाकर इसे बदल सकते हैं या protected
।
यह क्यों उपयोगी है?
क्योंकि आप इन तरीकों को बदलना आसान बना सकते हैं।
कल्पना कीजिए कि आप एक कोड लाइब्रेरी लिख रहे हैं जिसका उपयोग कुछ अलग-अलग परियोजनाओं में काम करने के लिए किया जा रहा है।
जब ये प्रोजेक्ट आपकी लाइब्रेरी को लागू करते हैं, तो वे आपके द्वारा बनाई गई कक्षाओं पर कॉलिंग के तरीके बनने जा रहे हैं।
अब :
आप एक नया संस्करण जारी करते हैं...
लेकिन आपने एक public
. पर नाम बदलने का फैसला किया है विधि।
इससे इस पद्धति का उपयोग करने वाले प्रत्येक प्रोजेक्ट में त्रुटियां उत्पन्न होंगी!
इसे याद रखें :
कम सार्वजनिक तरीके अपनाकर आप अपनी कक्षा के भीतर परिवर्तन की स्वतंत्रता को बढ़ाते हैं।
आइए कुछ कोड उदाहरण देखें!
रूबी में निजी तरीकों को समझना
क्या आपने कभी "निजी विधि कहा जाता है" त्रुटि संदेश देखा है?
यह वाला :
self.puts 123 # NoMethodError: private method `puts' called
फिर आपने एक private
. का उपयोग करने का प्रयास किया है विधि गलत है।
आप केवल एक निजी विधि का ही उपयोग कर सकते हैं।
उदाहरण :
puts 123
यह वही तरीका है, लेकिन आपको इसे इस तरह कहना होगा।
निजी विधियों को हमेशा self
. के संदर्भ में कहा जाता है ।
दूसरे शब्दों में…
आप केवल इसके साथ निजी विधियों का उपयोग कर सकते हैं :
- उसी कक्षा के अन्य तरीके
- मूल वर्ग से विरासत में मिली विधियां
- मॉड्यूल से शामिल तरीके
इसका मतलब है कि आप निजी विधियों को उस वर्ग के बाहर से कॉल नहीं कर सकते जो उन्हें परिभाषित करता है।
क्योंकि इसके लिए "स्पष्ट रिसीवर" की आवश्यकता होगी।
जब तक...
आप send
. जैसी विधि का उपयोग करते हैं इस नियम को बायपास करने के लिए।
send(:puts, "apple")
आप एक private
. को कैसे परिभाषित करते हैं विधि?
इसे पसंद करें :
def bacon "private bacon" end private :bacon
शब्द private
स्वयं एक कीवर्ड नहीं है, यह Kernel
. पर परिभाषित एक विधि है मॉड्यूल।
अपने निजी तरीके कहां रखें
एक वर्ग के लिए एक से अधिक निजी विधियों का होना सामान्य है।
आप इन विधियों को कहाँ रखते हैं?
यह करें :
class Food def public_method end private def bacon end def orange end def coconut end end
प्रत्येक आवृत्ति विधि private
. के बाद एक निजी तरीका बन जाता है।
आप private_class_method :method_name
. का उपयोग कर सकते हैं यदि आप किसी वर्ग विधि को निजी के रूप में परिभाषित करना चाहते हैं
पहले अपने सभी सार्वजनिक तरीकों को परिभाषित करना एक सामान्य पैटर्न है, फिर अपने private
. को परिभाषित करें कक्षा के अंत में एक साथ तरीके।
सार्वजनिक तरीके
रूबी में सार्वजनिक डिफ़ॉल्ट विधि दृश्यता है।
यहां एक उदाहरण दिया गया है :
def orange "Vitamin C" end
यदि आपके पास कोई वस्तु है food
जो orange
. को परिभाषित करता है , आप इसे इस तरह कह सकते हैं:
food.orange
अगर कोई तरीका निजी या संरक्षित किया गया है, तो आप उसे फिर से सार्वजनिक कर सकते हैं।
इसे पसंद करें :
public :orange
एक सुरक्षित तरीका क्या है?
संरक्षित तरीके कम आम हैं।
वे private
. की तरह हैं विधियों, लेकिन आप उन्हें किसी वस्तु पर कॉल कर सकते हैं और न केवल सीधे।
यदि आप निजी के साथ इस उदाहरण का प्रयास करें आपको एक त्रुटि मिलेगी:
class Food def initialize(name) @name = name end def ==(other) name == other.name end protected attr_reader :name end food = Food.new("chocolate") puts food == food
आपको त्रुटि इसलिए मिलती है क्योंकि name
निजी होगा इसलिए आप other.name
नहीं कर सकते ।
लेकिन protected
. के साथ यह कोड काम करता है!
निजी बनाम संरक्षित तरीके
यही अंतर है, तथ्य यह है कि protected
विधि को private
रखता है , लेकिन यह आपको उस विधि को किसी ऑब्जेक्ट पर कॉल करने की भी अनुमति देता है।
निजी के साथ आप केवल name
. कर सकते हैं , संरक्षित के साथ आप object.name
. कर सकते हैं ।
आपको संरक्षित कब उपयोग करना चाहिए?
केवल अगर आपके पास एक बहुत विशिष्ट मामला है, जैसे बराबर (==
) विधि।
रूबी दस्तावेज़ीकरण private
. का उपयोग करने की अनुशंसा करता है protected
. के बजाय जब भी संभव हो।
और यह नोट है :
<ब्लॉकक्वॉट>"एक सुरक्षित तरीका धीमा है क्योंकि यह इनलाइन कैश का उपयोग नहीं कर सकता है।"
मैं इसके बारे में उत्सुक था इसलिए मैंने कुछ बेंचमार्क चलाए :
public: 2813891.9 i/s private: 2699273.8 i/s protected: 2572122.0 i/s
यह प्रदर्शन में 8.5% का अंतर है।
वीडियो ट्यूटोरियल
सारांश
आपने रूबी विधि दृश्यता, सार्वजनिक, निजी और संरक्षित विधियों के बारे में सीखा है। ये रूबी नहीं हैं कीवर्ड , वे स्वयं Module
. पर परिभाषित विधियाँ हैं कक्षा।
कृपया इस पोस्ट को शेयर करें ताकि और लोग इस विषय को समझ सकें!
पढ़ने के लिए धन्यवाद