Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी प्राइवेट एंड प्रोटेक्टेड मेथड्स:अंडरस्टैंडिंग मेथड विजिबिलिटी

रूबी में एक निजी विधि क्या है?

यह एक प्रकार की विधि है जिसे आप केवल उस वर्ग के अंदर से ही कॉल कर सकते हैं जहां इसे परिभाषित किया गया है।

यह आपको अपने तरीकों तक पहुंच को नियंत्रित करने की अनुमति देता है।

एक रूबी विधि हो सकती है :

  • निजी
  • सार्वजनिक (डिफ़ॉल्ट)
  • संरक्षित

डिफ़ॉल्ट रूप से आपकी सभी विधियां 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 . पर परिभाषित विधियाँ हैं कक्षा।

कृपया इस पोस्ट को शेयर करें ताकि और लोग इस विषय को समझ सकें!

पढ़ने के लिए धन्यवाद


  1. रूबी की Gsub विधि का उपयोग करने के 3 शानदार तरीके

    आइए रूबी के gsub के बारे में बात करते हैं विधि और इसका उपयोग कैसे करें। सबसे पहले, आपको इस विधि से खेलने के लिए एक स्ट्रिंग की आवश्यकता होगी। क्यों? क्योंकि gsub . का पूरा बिंदु स्ट्रिंग के कुछ हिस्सों को बदलना है। वास्तव में : जीएसयूबी में उप का अर्थ विकल्प है, और जी का अर्थ वैश्विक है। यहां ए

  1. रूबी के कार्य और तरीके:अपना खुद का कैसे परिभाषित करें

    रूबी विधि क्या है? एक विशिष्ट उद्देश्य के लिए एक साथ समूहीकृत रूबी कोड की एक, या एकाधिक, एक विधि है। इस समूहीकृत कोड को एक नाम दिया गया है, ताकि आप जब चाहें, कोड को दोबारा लिखे या कॉपी और पेस्ट किए बिना इसका उपयोग कर सकें। विधि का उद्देश्य हो सकता है : जानकारी प्राप्त करें। वस्तुओं को बदलें या ब

  1. रूबी फ्रीज विधि - वस्तु परिवर्तनशीलता को समझना

    किसी वस्तु के परिवर्तनशील होने का क्या अर्थ है? फैंसी शब्दों को भ्रमित न होने दें, “परिवर्तनशीलता ” का सीधा सा मतलब है कि किसी वस्तु की आंतरिक स्थिति को बदला जा सकता है। जमे हुए . को छोड़कर, यह सभी वस्तुओं का डिफ़ॉल्ट है , या वे जो विशेष वस्तुओं की सूची का हिस्सा हैं। दूसरे शब्दों में, रूबी में सभ