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

रूबी में यील्ड और यील्ड_सेल्फ को समझना (पूरी गाइड)

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

खैर…

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

यहां बताया गया है कि आपको क्या जानना चाहिए :

  • किसी ब्लॉक को कॉल करने से उस ब्लॉक के अंदर कोड चलता है (जैसे किसी विधि को कॉल करना)
  • यील्ड किसी भी संख्या में तर्कों को ब्लॉक में पारित कर सकता है
  • ब्लॉक का रिटर्न वैल्यू 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 कहते हैं बिना किसी अवरोध के, तो आपको एक त्रुटि मिलती है।

उदाहरण :

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 का उपयोग करना ब्लॉक सक्षम करता है।

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

यह तब मददगार होता है जब :

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

बढ़िया!

यील्ड_सेल्फ - क्या अंतर है?

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

ठीक है, ऐसा नहीं है।

यहां तक ​​कि yield(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 खाली लेआउट के बराबर!

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

सारांश

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

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

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


  1. रूबी में डुप बनाम क्लोन:अंतर को समझना

    क्या आप जानते हैं कि आप रूबी में किसी वस्तु की प्रतिलिपि बना सकते हैं? इतना ही नहीं, ऐसा करने के दो अलग-अलग तरीके हैं! ये विधियां हैं : dup clone हम एक पल में मतभेदों का पता लगाएंगे, लेकिन पहले… आप किसी वस्तु का क्लोन क्यों बनाना चाहते हैं ? रूबी में कई वस्तुएं परिवर्तनशील हैं, आप उन्हें बदल

  1. रूबी में कार्यात्मक प्रोग्रामिंग (पूर्ण गाइड)

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

  1. एक संपूर्ण गाइड:फिटबिट पे

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