रूबी का मॉड्यूल सिस्टम कोड संगठन और पुन:प्रयोगशीलता के लिए एक शक्तिशाली उपकरण है। दो प्रमुख विधियाँ, include
और extend
, आपको कक्षाओं में मॉड्यूल कार्यक्षमता को शामिल करने की अनुमति देती हैं, लेकिन वे मूल रूप से अलग तरीके से ऐसा करती हैं। यह लेख उनकी विशिष्टताओं को स्पष्ट करता है और आपकी आवश्यकताओं के लिए उपयुक्त विधि चुनने में आपका मार्गदर्शन करता है।
सामग्री की तालिका
- रूबी में
include
को समझना - रूबी में
extend
को समझना include
बनामextend
का उपयोग कब करें- निष्कर्ष
- अक्सर पूछे जाने वाले प्रश्न (FAQ)
रूबी में 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
कर सकता हूँ? हाँ, उस मॉड्यूल से उदाहरण और कक्षा-स्तरीय दोनों विधियाँ प्रदान करना। - यदि मॉड्यूल एक ही नाम की विधियों को परिभाषित करते हैं तो क्या होता है? अंतिम मॉड्यूल शामिल या विस्तारित होता है; इसकी विधि दूसरों को ओवरराइड करती है (विधि ओवरराइडिंग)।
- क्या कोई प्रदर्शन निहितार्थ हैं? प्रदर्शन अंतर आमतौर पर नगण्य होते हैं। मामूली प्रदर्शन अनुकूलन पर कोड डिज़ाइन को प्राथमिकता दें।