Ruby next कीवर्ड (इटरेशन छोड़ें)
next कीवर्ड आपको एक इटरेशन को छोड़ने की अनुमति देता है।
उदाहरण:
मान लीजिए आप स्ट्रिंग्स गिन रहे हैं।
और किसी कारण से आप 4 आकार की स्ट्रिंग्स को नहीं गिनना चाहते।
आप ऐसा कर सकते हैं:
strings = ["one", "two", "four", "five"] strings.inject(0) do |sum, str| next if str.size == 4 sum + str.size end # nil
यह कोड काम नहीं करेगा।
आपको nil मिलेगा।
क्यों?
क्योंकि next डिफ़ॉल्ट रूप से nil लौटाता है, ठीक वैसे ही जैसे बिना रिटर्न वैल्यू के return कॉल करना।
जैसा कि आप जानते होंगे...
inject का उपयोग करने से ब्लॉक द्वारा लौटाया गया अंतिम मान लिया जाता है और वह अगले इटरेशन का पहला आर्गुमेंट बन जाता है।
दूसरे शब्दों में, sum nil बन जाता है।
समाधान?
next लाइन को इसमें बदलें:
next sum if str.size == 4
यह next को sum का मान लौटाता है।
यदि प्रदर्शन सर्वोच्च प्राथमिकता नहीं है (अक्सर यह नहीं है), तो आप next का उपयोग करने से बचने के लिए एरे को प्री-फिल्टर कर सकते हैं।
या और भी बेहतर:
strings = ["one", "two", "four", "five"]
strings.inject(0) { |sum, str| str.size == 4 ? sum : sum + str.size }
# 6
यह एक टर्नरी ऑपरेटर है।
मुझे लगता है कि Ruby आपको next का उपयोग करने से बचने के लिए पर्याप्त टूल्स देता है।
उनका उपयोग करें!
Ruby break कीवर्ड (लूप से जल्दी बाहर निकलें)
break कीवर्ड next की तरह है, लेकिन यह लूप को समाप्त करता है और एक मान लौटाता है, बजाय केवल एक इटरेशन को छोड़ने के।
इसका उपयोग लूप से जल्दी रिटर्न के लिए किया जा सकता है।
returnकीवर्ड का उपयोग क्यों नहीं? क्योंकि यह वर्तमान मेथड से बाहर निकल जाएगा, न कि केवल लूप से।
या एक बिना शर्त लूप को समाप्त करने के लिए।
इस तरह:
count = 0 loop do break if count == 10 puts count count += 1 end
यह 0 से 9 तक संख्याओं की एक सूची प्रिंट करता है।
एक बेहतर विकल्प times मेथड, upto मेथड, या एक रेंज प्लस each मेथड का उपयोग करना होगा।
उदाहरण:
0.upto(9).each(&method(:puts))
यह &method(:puts) प्रत्येक संख्या के लिए puts कॉल करने का सिर्फ एक शॉर्टकट है।
भ्रम से बचना: एक Ruby मेथड के रूप में Next
सिर्फ इसलिए कि कोई चीज़ कीवर्ड के रूप में मौजूद है, इसका मतलब यह नहीं है कि इसका उपयोग मेथड नाम के रूप में नहीं किया जा सकता।
Ruby में कुछ क्लासेस next को एक मेथड के रूप में लागू करती हैं।
String और Integer की तरह।
उदाहरण:
1.next # 2
परिणाम आश्चर्यजनक नहीं है, है ना?
यह कैसे है:
"zz".next # "aaa"
यह थोड़ा अधिक दिलचस्प है!
यह कैसे काम करता है?
ठीक है, हर क्लास next का अपना संस्करण लागू करती है, जिसमें अगले मान के लिए लॉजिक होता है।
Integers के लिए, यह सिर्फ +1 है।
Strings के लिए, यह अंतिम कैरेक्टर को एक से बढ़ाता है (अल्फाबेट में अगला / संख्याओं के लिए +1), फिर यदि एक कैरीओवर है (9 -> 0, z -> a), तो यह बाईं ओर अगले कैरेक्टर को बढ़ाएगा।
सारांश
आपने Ruby में next और break कीवर्ड्स के बारे में सीखा, कैसे वे आपको इटरेशन छोड़ने या लूप को जल्दी रोकने में मदद करते हैं।
अब अपने Ruby कौशल का अभ्यास करने की आपकी बारी है 🙂
पढ़ने के लिए धन्यवाद!