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

रूबी में मास्टर मेथड डेलिगेशन:एक प्रैक्टिकल गाइड

<पी> प्रोग्रामिंग में प्रत्यायोजन से तात्पर्य किसी कार्य को प्रोग्राम के एक भाग से दूसरे भाग में सौंपने से है। यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में एक आवश्यक तकनीक है, जो यह सुनिश्चित करके स्वच्छ, बनाए रखने योग्य कोड को सशक्त बनाती है कि प्रत्येक ऑब्जेक्ट या विधि एक विशिष्ट कार्य या व्यवहार के लिए जिम्मेदार है।

<पी> प्रतिनिधिमंडल को समझना और उसका उपयोग करना रूबी और अन्य ऑब्जेक्ट-ओरिएंटेड भाषाओं में महारत हासिल करने की कुंजी है। प्रतिनिधिमंडल चिंताओं को अलग करने को बढ़ावा देता है, जिससे आपका कोड अधिक मॉड्यूलर और समझने, परीक्षण करने और रिफैक्टर करने में आसान हो जाता है।

<पी> इस आलेख में, हम रूबी में प्रतिनिधिमंडल प्राप्त करने के तीन तरीकों पर विचार करेंगे:स्पष्ट प्रतिनिधिमंडल का उपयोग करके, Forwardable मॉड्यूल, और ActiveSupport::Delegate (रेल के लिए).

<पी> आइए शुरू करें!

रूबी में प्रतिनिधिमंडल

<पी> आइए स्पष्ट प्रतिनिधिमंडल पर चर्चा करके शुरुआत करें - एक विधि के भीतर एक विधि को कॉल करना। फिर हम अंतर्निहित Forwardable का अन्वेषण करेंगे मॉड्यूल और यह प्रतिनिधिमंडल को कैसे सुव्यवस्थित कर सकता है। अंत में, हम ActiveSupport::Delegate को कवर करेंगे , कुछ उपयोगी सुविधाओं के साथ एक रेल-विशिष्ट प्रतिनिधिमंडल उपकरण।

स्पष्ट प्रतिनिधिमंडल

<पी> अपने सरलतम रूप में, किसी अन्य विधि के भीतर एक विधि को स्पष्ट रूप से कॉल करके प्रतिनिधिमंडल प्राप्त किया जा सकता है। यह दृष्टिकोण अक्सर तब नियोजित किया जाता है जब प्रत्यायोजित विधि एक अलग वस्तु से संबंधित होती है या जब प्रत्यायोजन इतना सरल होता है कि अधिक उन्नत तकनीकों के उपयोग की आवश्यकता नहीं होती है।

<पी> रूबी में स्पष्ट प्रतिनिधिमंडल को लागू करना सीधा है। आइए Printer का एक उदाहरण लें क्लास जो टेक्स्ट प्रिंट करने के लिए HP ऑब्जेक्ट का उपयोग करता है:

 <पी> उपरोक्त उदाहरण में, Printer की प्रिंट विधि वर्ग स्पष्ट रूप से फ़ॉर्मेटिंग कार्य को HP को सौंपता है क्लास को इसके फॉर्मेट मेथड को कॉल करके। यह प्रतिनिधिमंडल सरल और पठनीय तरीके से मुद्रण जिम्मेदारी को अन्य वर्ग को आउटसोर्स करता है।

<पी> वास्तविक दुनिया के अनुप्रयोगों में स्पष्ट प्रतिनिधिमंडल आम है, क्योंकि यह चिंताओं और रखरखाव योग्य कोड को अलग करने को बढ़ावा देने में मदद करता है। उदाहरण के लिए, आप इस तकनीक का उपयोग उन अनुप्रयोगों में पा सकते हैं जिनके लिए विभिन्न सेवाओं के बीच संचार की आवश्यकता होती है, जहां एक सेवा किसी विशिष्ट कार्य को करने के लिए दूसरे को कॉल करती है।

<पी> इसके अतिरिक्त, तीसरे पक्ष के पुस्तकालयों के आसपास एडाप्टर या रैपर बनाते समय स्पष्ट प्रतिनिधिमंडल उपयोगी हो सकता है, क्योंकि यह आपको बाहरी कोड के साथ इंटरैक्शन को अलग करने की अनुमति देता है।

<पी> संक्षेप में, स्पष्ट प्रतिनिधिमंडल रूबी में वस्तुओं के बीच कार्यों को सौंपने का एक सीधा और प्रभावी तरीका है। किसी अन्य विधि के भीतर एक विधि को कॉल करके, आप आसानी से जिम्मेदारियां सौंप सकते हैं, अपने कोड को अधिक रखरखाव योग्य बना सकते हैं और चिंताओं के पृथक्करण को बढ़ावा दे सकते हैं।

रूबी का फॉरवर्डेबल मॉड्यूल

<पी> फॉरवर्डेबल मॉड्यूल एक अंतर्निहित रूबी लाइब्रेरी है जो स्पष्ट प्रतिनिधिमंडल की तुलना में प्रतिनिधि विधियों के लिए अधिक सुव्यवस्थित और लचीला दृष्टिकोण प्रदान करता है। अपनी कक्षा में फ़ॉरवर्डेबल मॉड्यूल को शामिल करके, आप def_delegator जैसी विधियों तक पहुंच प्राप्त करते हैं और def_delegators , प्रतिनिधिमंडल बनाना आसान है।

<पी> फ़ॉरवर्डेबल मॉड्यूल के साथ आरंभ करने के लिए, इसे अपनी कक्षा में शामिल करें और def_delegator का उपयोग करें औरdef_delegators क्रमशः एक या एकाधिक विधियों को सौंपने की विधियाँ। आइए एक नए Formatter के साथ हमारे प्रिंटर उदाहरण पर दोबारा गौर करें क्लास करें और फ़ॉर्वर्डेबल मॉड्यूल लागू करें:

 <पी> उपरोक्त उदाहरण में, हमने def_delegator का उपयोग किया है फ़ॉर्मेटर वर्ग से प्रारूप विधि को सौंपने के लिए। यदि आपको एक साथ कई विधियाँ सौंपने की आवश्यकता है, तो आप def_delegators का उपयोग कर सकते हैं . उदाहरण के लिए, यदि Formatter क्लास में capitalize जैसी अतिरिक्त विधियाँ थीं , आप उन्हें इस प्रकार सौंप सकते हैं:

 <पी> फ़ॉरवर्डेबल मॉड्यूल का उपयोग करते समय, विचार करने के लिए कुछ महत्वपूर्ण संभावित कमियाँ हैं:

  • सबसे पहले, सुनिश्चित करें कि डेलिगेशन का उपयोग करने से पहले लक्ष्य ऑब्जेक्ट प्रारंभ किया गया है। अन्यथा, आपको त्रुटियों का सामना करना पड़ सकता है।
  • दूसरा, प्रत्यायोजन के अत्यधिक उपयोग से कोड पठनीयता में संभावित भ्रम पैदा हो सकता है, क्योंकि यह स्पष्ट नहीं हो सकता है कि कौन सी विधियाँ वर्ग की हैं और कौन सी प्रत्यायोजित हैं।
  • आखिरकार, डायरेक्ट मेथड कॉल की तुलना में फ़ॉरवर्डेबल का उपयोग करते समय थोड़ा प्रदर्शन ओवरहेड हो सकता है। हालाँकि, अधिकांश अनुप्रयोगों में यह ओवरहेड आम तौर पर नगण्य है।
<पी> फ़ॉरवर्डेबल मॉड्यूल के बारे में अधिक गहन जानकारी के लिए, फ़ॉरवर्डेबल दस्तावेज़ देखें।

ActiveSupport::Delegate रेल अनुप्रयोगों के लिए

<पी> ActiveSupport::Delegate रेल द्वारा प्रदान की गई एक प्रतिनिधिमंडल उपयोगिता है, जो संबंधित वस्तुओं को तरीकों को सौंपने के लिए एक संक्षिप्त वाक्यविन्यास प्रदान करती है। जबकि यह रूबी के अंतर्निहित फॉरवर्डेबल मॉड्यूल, ActiveSupport::Delegate के साथ समानताएं साझा करता है रेल अनुप्रयोगों के लिए तैयार किए गए अतिरिक्त विकल्प और सुविधाएँ प्रदान करता है।

<पी> ActiveSupport::Delegate का उपयोग करने के लिए , बस अपनी कक्षा में प्रतिनिधि विधि को कॉल करें और लक्ष्य ऑब्जेक्ट के साथ प्रत्यायोजित की जाने वाली विधियों को निर्दिष्ट करें। आइए प्रिंटर और फ़ॉर्मेटर उदाहरण पर दोबारा गौर करें और ActiveSupport::Delegate का उपयोग करके प्रतिनिधिमंडल को कार्यान्वित करें :

 <पी> ActiveSupport::Delegate अतिरिक्त विकल्प और सुविधाएँ प्रदान करता है जो विभिन्न परिदृश्यों में उपयोगी हो सकते हैं। उदाहरण के लिए, आप :prefix का उपयोग कर सकते हैं प्रत्यायोजित विधि में एक उपसर्ग जोड़ने का विकल्प। यदि आप एक साथ कई विधियाँ सौंपना चाहते हैं, तो बस उन्हें to: से पहले सूचीबद्ध करें विकल्पः

 <पी> यह formatter_format जैसी विधियाँ उत्पन्न करता है , formatter_bold , और formatter_italic Printer में वर्ग, Formatter में संबंधित तरीकों को सौंप रहा है क्लास.

<पी> ActiveSupport::Delegate आमतौर पर वास्तविक दुनिया की रेल परियोजनाओं में संबंधित मॉडलों या वस्तुओं के बीच तरीकों को सौंपने के लिए उपयोग किया जाता है। उदाहरण के लिए, यदि आपके पास User है मॉडल जो belongs_to है एक संगठन, आप organization से नाम विधि सौंप सकते हैं User पर मॉडल इस प्रकार मॉडल:

 <पी> यह आपको उपयोगकर्ता ऑब्जेक्ट के माध्यम से संगठन के नाम तक पहुंचने की अनुमति देता है:user.organization_name .

<पी> अंत में, ActiveSupport::Delegate रेल अनुप्रयोगों के लिए एक शक्तिशाली उपकरण है जो विधियों के संक्षिप्त और अभिव्यंजक प्रतिनिधिमंडल को सक्षम बनाता है। इसके अतिरिक्त विकल्पों और सुविधाओं का लाभ उठाकर, आप रखरखाव योग्य और सुव्यवस्थित कोड बना सकते हैं जो रेल परियोजनाओं के संदर्भ में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के सिद्धांतों का पालन करता है।

<पी> ActiveSupport::Delegate के बारे में अधिक गहन जानकारी के लिए और सभी उपलब्ध विकल्पों के लिए, रेल्स एक्टिवसपोर्ट दस्तावेज़ देखें।

प्रत्यायोजन तकनीकों की तुलना

<पी> स्पष्ट प्रतिनिधिमंडल, प्रतिनिधिमंडल के लिए सबसे सरल दृष्टिकोण है, इसके लिए मैन्युअल रूप से परिभाषित तरीकों की आवश्यकता होती है जो प्रत्यायोजित ऑब्जेक्ट से वांछित तरीकों को बुलाते हैं। हालांकि यह तकनीक सरल है और इसके लिए किसी बाहरी पुस्तकालय की आवश्यकता नहीं है, लेकिन तरीकों की बढ़ती संख्या को सौंपते समय यह बहुत अधिक क्रियाशील हो सकता है।

<पी> रूबी में निर्मित फॉरवर्डेबल मॉड्यूल, तरीकों को सौंपने के लिए अधिक सुव्यवस्थित तरीका प्रदान करता है। def_delegator का उपयोग करके और def_delegators विधियाँ, आप एक या एकाधिक विधियों को संक्षेप में सौंप सकते हैं।

<पी> ActiveSupport::Delegate रेल्स की एक्टिव सपोर्ट लाइब्रेरी का हिस्सा, विधि प्रतिनिधिमंडल को संभालने के लिए एक घोषणात्मक तरीका प्रदान करता है। स्वच्छ वाक्यविन्यास और उपसर्ग जैसे अतिरिक्त विकल्पों के साथ, यह रेल संदर्भ में एक अभिव्यंजक उपकरण है। स्पष्ट प्रतिनिधिमंडल की तुलना में, ActiveSupport::Delegate अधिक अभिव्यंजक और कम क्रियात्मक है, खासकर जब कई तरीकों को सौंपते हैं। हालाँकि, इसके लिए रेल की आवश्यकता होती है, इसलिए यह गैर-रेल रूबीप्रोजेक्ट्स के लिए उपयुक्त नहीं है।

<पी> प्रतिनिधिमंडल तकनीक का चयन आपकी विशिष्ट आवश्यकताओं और अनुप्रयोग पर निर्भर करता है। जबकि स्पष्ट प्रतिनिधिमंडल सरलता और स्पष्टता प्रदान करता है, फ़ॉरवर्डेबल मॉड्यूल एक अधिक सुव्यवस्थित दृष्टिकोण प्रदान करता है, और ActiveSupport::Delegate एक शक्तिशाली, रेल-विशिष्ट समाधान प्रदान करता है। इन विकल्पों को समझने से आप वह तकनीक चुन सकते हैं जो आपके प्रोजेक्ट और कोडिंग शैली के लिए सबसे उपयुक्त हो।

समापन

<पी> स्पष्ट प्रतिनिधिमंडल से लेकर अंतर्निहित फॉरवर्डेबल मॉड्यूल या रेल-विशिष्ट ActiveSupport::Delegate का उपयोग करने तक , प्रत्येक तकनीक अपने अनूठे लाभ और संभावित कमियां प्रदान करती है। आपको जो तकनीक चुननी चाहिए वह आपके विशिष्ट संदर्भ, आपके प्रोजेक्ट की प्रकृति और आपकी व्यक्तिगत कोडिंग शैली पर निर्भर करती है।

<पी> इन तकनीकों को समझने से न केवल आपके रूबी प्रोग्रामिंग कौशल का विस्तार होता है बल्कि आपको अधिक मॉड्यूलर, पठनीय और रखरखाव योग्य कोड लिखने में भी मदद मिलती है। इस ज्ञान के साथ, आप शानदार डिज़ाइन के साथ जटिल समस्याओं से निपटने के लिए बेहतर ढंग से तैयार हैं।

<पी> प्रतिनिधिमंडल को शुभकामनाएँ!

<पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें! रूबी में मास्टर मेथड डेलिगेशन:एक प्रैक्टिकल गाइड

जेफ मॉर्हाउस

<पी> हमारे अतिथि लेखक जेफ़ मॉर्हाउस एक सॉफ़्टवेयर इंजीनियर हैं जो कोड लिखते हैं और मरीज़ों को उनकी ज़रूरत की दवाएँ प्राप्त करने में मदद करने के लिए बग ठीक करते हैं। इन दिनों वह रूबी ऑन रेल्स के साथ वेब एप्लिकेशन बनाने पर ध्यान केंद्रित कर रहे हैं, लेकिन अतीत में उन्होंने आईओएस और एंड्रॉइड विकास के लिए स्विफ्ट, जावा और कोटलिन का उपयोग किया है।

<पी> जेफ मॉर्हाउस

द्वारा सभी लेख
  1. एचटीएमएल डोम इनपुट रीसेट नाम संपत्ति एचटीएमएल डोम इनपुट रीसेट नाम संपत्ति

    HTML DOM इनपुट रीसेट नाम संपत्ति का उपयोग रीसेट बटन के नाम विशेषता को सेट करने या वापस करने के लिए किया जाता है। नाम विशेषता सर्वर पर सबमिट किए जाने के बाद प्रपत्र डेटा की पहचान करने में मदद करती है। सिंटैक्स − . के लिए वाक्य रचना निम्नलिखित है नाम संपत्ति सेट करना - resetObject.name = name यहाँ,

  1. अपने Linux टर्मिनल से फ़्लैटपैक लॉन्च करें अपने Linux टर्मिनल से फ़्लैटपैक लॉन्च करें

    फ्लैटपैक एप्लिकेशन वितरण मॉडल डेवलपर्स को नए और आसान तरीके से लिनक्स को लक्षित करने में मदद कर रहा है, और यह लिनक्स उपयोगकर्ताओं को लिनक्स के किस संस्करण के बारे में चिंता किए बिना अधिक एप्लिकेशन इंस्टॉल करने में मदद कर रहा है। यह एक रोमांचक तकनीक है, और मेरे फेडोरा सिल्वरब्लू सिस्टम पर, यह डिफ़ॉल्ट

  1. आसन्न सूची प्रतिनिधित्व के लिए दिज्क्स्ट्रा का एल्गोरिदम आसन्न सूची प्रतिनिधित्व के लिए दिज्क्स्ट्रा का एल्गोरिदम

    एक दिया गया ग्राफ़ G(V, E) है, जिसकी आसन्न सूची निरूपण के साथ है, और एक स्रोत शीर्ष भी प्रदान किया गया है। ग्राफ़ जी के किसी अन्य शीर्ष से स्रोत शीर्ष के बीच न्यूनतम सबसे छोटा पथ खोजने के लिए डिजस्ट्रा का एल्गोरिदम। इस समस्या को हल करने के लिए, हम दो सूचियों का उपयोग करेंगे। एक कोने को स्टोर करना