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

रूबी में Yield और Yield_Self मास्टर करें: एक व्यापक मार्गदर्शिका

रूबी में "yield" शब्द का क्या अर्थ है? और यह वास्तव में क्या करता है?

खैर...

Yield एक कीवर्ड है (मतलब यह भाषा का एक मुख्य हिस्सा है) और इसका उपयोग मेथड्स के अंदर ब्लॉक को कॉल करने के लिए किया जाता है।

यहां आपको क्या जानने की आवश्यकता है:

  • ब्लॉक को कॉल करने से उस ब्लॉक के अंदर का कोड चलता है (मेथड को कॉल करने की तरह)
  • Yield ब्लॉक को किसी भी संख्या में आर्ग्युमेंट्स पास कर सकता है
  • ब्लॉक का रिटर्न मान yield के लिए रिटर्न मान बन जाता है

आपको इसके लिए ब्लॉक्स को समझना होगा।

आप ब्लॉक्स को बिना नाम के मेथड्स के रूप में सोच सकते हैं जिन्हें अन्य मेथड्स के लिए अतिरिक्त आर्ग्युमेंट्स के रूप में पास किया जा सकता है।

यहां एक उदाहरण है:

 def make_salad yield "lettuce" yield "carrots" yield "olive oil" end make_salad { |ingredient| puts "Adding #{ingredient} to salad!" } 

यह ब्लॉक को 3 बार कॉल करता है, यह आउटपुट उत्पन्न करता है:

 Adding lettuce to salad! Adding carrots to salad! Adding olive oil to salad! 

यही सार है yield का, यह मेथड कॉल करने जैसा है, लेकिन इसके बजाय आप ब्लॉक को कॉल कर रहे हैं।

ब्लॉक के लिए हमारे पास नाम नहीं है, इसलिए यह कीवर्ड इसका ख्याल रखता है।

अब:

आइए देखें कि क्या होता है यदि आपके पास कॉल करने के लिए ब्लॉक नहीं है।

ब्लॉक के बिना Yield == त्रुटि संदेश

यदि आप ब्लॉक के बिना yield कॉल करते हैं, तो आपको त्रुटि मिलती है।

उदाहरण:

 def write_code yield end write_code # LocalJumpError: no block given (yield) 

यह त्रुटि क्रिस्टल-क्लियर है, "कोई ब्लॉक नहीं दिया गया" का मतलब है कि मेथड कॉल write_code ब्लॉक प्रदान नहीं कर रहा है।

आप इस त्रुटि को कैसे रोक सकते हैं?

इस तरह:

 def write_code yield if block_given? end 

block_given? मेथड जांचता है कि क्या ब्लॉक उपलब्ध है और यह आपको केवल तभी yield करने की अनुमति देता है जब यह सच हो।

Yield का उपयोग क्यों करें?

yield का उपयोग ब्लॉक्स को सक्षम करता है।

हम ब्लॉक्स का उपयोग मेथड कॉल के हिस्से के रूप में कोड के टुकड़ों को पास करने के लिए करते हैं।

यह तब उपयोगी होता है जब:

  • आप एक जेनेरिक लॉगिंग फंक्शन लिखना चाहते हैं, जो लॉग करता है कि कोड का एक टुकड़ा चलने में कितना समय लेता है
  • आप चाहते हैं कि मेथड समाप्त होने पर कुछ कोड चले (जावास्क्रिप्ट में "कॉलबैक्स" की तरह)
  • आप "आलसी कोड" चाहते हैं, कोड जो केवल तभी चलता है जब आवश्यक हो और जिसे उपयोगकर्ता द्वारा अनुकूलित किया जा सके (इसका उदाहरण Hash#fetch मेथड के बारे में पढ़ें)

अच्छा!

Yield_Self - अंतर क्या है?

आपको यह नया yield_self मेथड मिल सकता है और सोच सकते हैं कि यह yield से संबंधित है।

खैर, यह नहीं है।

यहां तक कि yield(self) भी अलग है, क्योंकि self वर्तमान ऑब्जेक्ट को संदर्भित करता है।

जहां yield_self, जिसे रूबी 2.5 में जोड़ा गया था, उस ऑब्जेक्ट को संदर्भित करता है जिस पर हम मेथड कॉल कर रहे हैं।

इस मेथड के लिए एक अच्छा उपयोग?

जब भी आप मेथड्स को चेन करना चाहते हैं और उस ऑब्जेक्ट के साथ कुछ करना चाहते हैं जिस पर आप yield_self कॉल कर रहे हैं, इसका उपयोग करें।

मूल ऑब्जेक्ट के बजाय परिणाम लौटाते हुए।

उदाहरण:

 n_squared = ->(n) { n ** 2 } 2 .yield_self(&n_squared) .yield_self(&n_squared) # 16 

रूबी 2.6 में, yield_self के लिए एक उपनाम है, then मेथड।

लेकिन इसे अपने नियमित yield से भ्रमित न करें।

ठीक है?

रेल्स में Yield

मुझे रेल्स और टेम्पलेटिंग इंजन में yield के उपयोग का त्वरित उल्लेख भी देना चाहिए।

आप लेआउट्स के अंदर yield पाएंगे।

रेल्स इसे आपके द्वारा रेंडर किए जा रहे व्यू की सामग्री से बदल देता है।

कोई yield नहीं बराबर खाली लेआउट!

यही वह तरीका है जिससे लेआउट और आपके व्यू एक साथ जुड़ते हैं।

सारांश

आपने रूबी में yield कीवर्ड के बारे में सीखा! वास्तव में यह क्या है, यह कैसे काम करता है और यह क्यों मायने रखता है।

अब इसे अपने रूबी कोड में आज़माएं।

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


  1. रूबी में Dup vs Clone: ऑब्जेक्ट कॉपी करने की तकनीकों में महारत हासिल करें रूबी में Dup vs Clone: ऑब्जेक्ट कॉपी करने की तकनीकों में महारत हासिल करें

    क्या आप जानते हैं कि आप रूबी में ऑब्जेक्ट कॉपी कर सकते हैं? न केवल यह, बल्कि ऐसा करने के लिए दो अलग-अलग मेथड्स हैं! ये मेथड्स हैं: dup clone हम एक पल में अंतर का पता लगाएंगे, लेकिन पहले... आप ऑब्जेक्ट को क्लोन क्यों करना चाहेंगे? रूबी में कई ऑब्जेक्ट्स म्यूटेबल हैं, आप उन्हें बदल सकते हैं। यदि आप

  1. रूबी में फंक्शनल प्रोग्रामिंग में महारत: एक पूर्ण गाइड रूबी में फंक्शनल प्रोग्रामिंग में महारत: एक पूर्ण गाइड

    शायद आपने अभी फंक्शनल प्रोग्रामिंग के बारे में सुना है और आपके कुछ सवाल हैं। जैसे… फंक्शनल प्रोग्रामिंग वास्तव में क्या है? यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से कैसे तुलना करता है? क्या आपको रूबी में फंक्शनल प्रोग्रामिंग का उपयोग करना चाहिए? मैं इन सवालों का जवाब दूंगा ताकि आप बेहतर ढंग से समझ सके

  1. Fitbit Pay मास्टर करें: परम यूजर गाइड Fitbit Pay मास्टर करें: परम यूजर गाइड

    Fitbit उपलब्ध सर्वोत्तम स्मार्ट वियरेबल्स में से एक है। यह कई मॉडल्स में और कई सुविधाओं के साथ आता है। Fitbit की प्रसिद्ध विशेषताओं में से एक है Fitbit Pay। Fitbit Ionic और Fitbit Versa में नियर फील्ड कम्युनिकेशन चिप के साथ, आप किसी भी स्टोर पर भुगतान कर सकते हैं जो कॉन्टैक्टलेस भुगतान स्वीकार करता