Ruby Programming

Ruby के मॉड्यूल सिस्टम में महारथ: Include बनाम Extend

Spread the love

रूबी का मॉड्यूल सिस्टम कोड संगठन और पुन:प्रयोगशीलता के लिए एक शक्तिशाली उपकरण है। दो प्रमुख विधियाँ, include और extend, आपको कक्षाओं में मॉड्यूल कार्यक्षमता को शामिल करने की अनुमति देती हैं, लेकिन वे मूल रूप से अलग तरीके से ऐसा करती हैं। यह लेख उनकी विशिष्टताओं को स्पष्ट करता है और आपकी आवश्यकताओं के लिए उपयुक्त विधि चुनने में आपका मार्गदर्शन करता है।

सामग्री की तालिका

रूबी में include को समझना

include विधि एक मॉड्यूल की विधियों को एक कक्षा के उदाहरणों में लाती है। कक्षा से बनाया गया प्रत्येक ऑब्जेक्ट इन विधियों को प्राप्त करेगा और उनका उपयोग करने में सक्षम होगा।


module Sayable
  def speak(message)
    puts message
  end
end

class Dog
  include Sayable
end

sparky = Dog.new
sparky.speak("Woof!") # => Woof!

इस उदाहरण में, Dog उदाहरण, जैसे sparky, include के कारण speak विधि प्राप्त करते हैं।

रूबी में extend को समझना

extend, इसके विपरीत, एक मॉड्यूल की विधियों को सीधे कक्षा में ही जोड़ता है, न कि उसके उदाहरणों में। ये विधियाँ कक्षा पर कॉल करने योग्य हैं लेकिन उस कक्षा से बनाए गए अलग-अलग ऑब्जेक्ट्स पर नहीं।


module Growlable
  def growl
    puts "Grrrr!"
  end
end

class Cat
  extend Growlable
end

Cat.growl # => Grrrr!
whiskers = Cat.new
# whiskers.growl  # => NoMethodError: undefined method 'growl' for #<Cat:0x...>

केवल Cat कक्षा ही growl को कॉल कर सकती है; whiskers, एक Cat उदाहरण, नहीं कर सकता।

include बनाम extend का उपयोग कब करें

निर्णय पूरी तरह से इस बात पर निर्भर करता है कि आपको उदाहरण स्तर या कक्षा स्तर पर पहुँचा जा सकने वाली विधियों की आवश्यकता है या नहीं।

  • include का उपयोग करें जब: आप ऐसी विधियाँ जोड़ रहे हैं जो कक्षा के प्रत्येक ऑब्जेक्ट (उदाहरण) के लिए उपलब्ध होनी चाहिए। यह सबसे आम उपयोग मामला है। व्यक्तिगत ऑब्जेक्ट्स में व्यवहार या कार्यक्षमता जोड़ने के बारे में सोचें।
  • extend का उपयोग करें जब: आप ऐसी विधियाँ जोड़ रहे हैं जो स्वयं कक्षा पर काम करती हैं, जैसे कक्षा-स्तरीय विधियाँ (जैसे, फ़ैक्टरी विधियाँ), या विधियाँ जो कक्षा के व्यवहार को संशोधित करती हैं। इन विधियों को आम तौर पर उदाहरण चरों तक पहुँच की आवश्यकता नहीं होती है।

निष्कर्ष

include और extend दोनों ही रूबी के शस्त्रागार में मूल्यवान उपकरण हैं। उनके विशिष्ट व्यवहारों—उदाहरण-स्तरीय बनाम कक्षा-स्तरीय विधियों—को समझना स्वच्छ, बनाए रखने योग्य और कुशल कोड लिखने के लिए महत्वपूर्ण है। सही दृष्टिकोण चुनना कोड डिज़ाइन और पठनीयता को महत्वपूर्ण रूप से प्रभावित करता है।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

  • क्या मैं एक से अधिक मॉड्यूल extend कर सकता हूँ? हाँ, एक से अधिक मॉड्यूल को एक्सटेंड करने से उनकी विधियाँ कक्षा में जुड़ जाती हैं।
  • क्या मैं एक ही मॉड्यूल को include और extend कर सकता हूँ? हाँ, उस मॉड्यूल से उदाहरण और कक्षा-स्तरीय दोनों विधियाँ प्रदान करना।
  • यदि मॉड्यूल एक ही नाम की विधियों को परिभाषित करते हैं तो क्या होता है? अंतिम मॉड्यूल शामिल या विस्तारित होता है; इसकी विधि दूसरों को ओवरराइड करती है (विधि ओवरराइडिंग)।
  • क्या कोई प्रदर्शन निहितार्थ हैं? प्रदर्शन अंतर आमतौर पर नगण्य होते हैं। मामूली प्रदर्शन अनुकूलन पर कोड डिज़ाइन को प्राथमिकता दें।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *