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

रूबी के redo, retry, और next में महारत: लूप कंट्रोल और एक्सेप्शन हैंडलिंग

हमने retry कीवर्ड के बारे में बात की जब एक्सेप्शन्स के बाद पुनः प्रयास करने पर चर्चा कर रहे थे। इसका कम ज्ञात समकक्ष redo इसी तरह काम करता है, लेकिन पूरे ब्लॉक्स के बजाय लूप इटरेशन्स को फिर से चलाता है।

redo कीवर्ड

जैसा कि हमने पिछले अकादमी लेख में सीखा, retry आपको ब्लॉक में कोड के एक टुकड़े को पुनः प्रयास करने देता है:

begin
  puts "Iteration"
  raise
rescue
  retry
end

यह उदाहरण एक्सेप्शन उठाने से पहले कंसोल पर "Iteration" शब्द प्रिंट करता है। रेस्क्यू ब्लॉक निष्पादित होता है, जो retry कॉल करता है और ब्लॉक को शुरुआत से फिर से शुरू करता है। इसके परिणामस्वरूप हमारा प्रोग्राम अंतहीन रूप से Iteration प्रिंट करता है। redo कीवर्ड आपको लूप्स का उपयोग करते समय इसी तरह का प्रभाव प्राप्त करने देता है। यह उन स्थितियों में उपयोगी है जहां आपको इटरेट करते समय पुनः प्रयास करने की आवश्यकता होती है।

10.times do |i|
  puts "Iteration #{i}"
  redo if i > 2
end

यह प्रिंट करेगा:

$ ruby redo.rb
Iteration 0
Iteration 1
Iteration 2
Iteration 3
Iteration 3
Iteration 3
... 

ध्यान दें कि इटरेशन काउंट समान कैसे रहता है? यह एक्जीक्यूशन को लूप की शुरुआत में वापस ले जाता है। retry का उपयोग करने वाला कोड का यह संस्करण ठीक वही आउटपुट प्रिंट करेगा:

10.times do |i|
  begin
    puts "Iteration #{i}"
    raise if i > 2
  rescue
    retry
  end
end

आप लूप में पुनः प्रयास लागू करने के लिए redo का उपयोग कर सकते हैं। अगले उदाहरण में हमारे पास जॉब्स की एक कतार है। वे या तो :success या :failure लौटाते हैं। हम लूप के उसी इटरेशन को तब तक फिर से चलाते रहते हैं जब तक जॉब सफल न हो जाए।

[job_1, job_2, job_3, job_4].each do |job|
  redo unless job.call == :success
end

रूबी 1.8

retry और redo का व्यवहार रूबी 1.8 और 1.9 के बीच बदल गया। वे लूप के इटरेशन को पुनः शुरू करते थे, लेकिन दोनों अलग तरीके से। 1.9 से, retry केवल begin/rescue ब्लॉक के साथ काम करता है और redo केवल लूप्स के भीतर काम करता है।

next कीवर्ड

यदि आप करंट इटरेशन की शुरुआत में वापस जाने के बजाय लूप के अगले इटरेशन पर जाना चाहते हैं, तो आप next का उपयोग कर सकते हैं।

10.times do |i|
  puts "Iteration #{i}"
  next if i > 2
  puts "Iteration done"
end

यह प्रिंट करेगा:

$ ruby next.rb
Iteration 0
Iteration done
Iteration 1
Iteration done
Iteration 2
Iteration done
Iteration 3
Iteration 4
... 

देखें कि इटरेशन काउंट कैसे बढ़ता रहता है? ज्यादातर मामलों में next का उपयोग करना वही है जो आप चाहते हैं। redo को देखें यदि आपको एक लूप की आवश्यकता है जो सटीक संख्या में बार चलता है या ऐरे पर इटरेट करते समय एरर हैंडलिंग की आवश्यकता है।

हमें उम्मीद है कि आपने लूप्स में इटरेशन्स को फिर से करने के बारे में कुछ नया सीखा और इस लेख (या ऐपसिग्नल अकादमी श्रृंखला के अन्य लेखों) के बारे में आपका क्या विचार है, यह जानना पसंद करेंगे। कृपया हमें बताने में संकोच न करें कि आप क्या सोचते हैं, या यदि आपके पास कोई रूबी विषय है जिसके बारे में आप अधिक सीखना चाहेंगे।

  1. मैक पर पूर्ववत और पुनः करें कैसे करें मैक पर पूर्ववत और पुनः करें कैसे करें

    कंप्यूटर पर काम करने के सबसे अच्छे हिस्सों में से एक है आपके द्वारा की गई किसी भी गलती को जल्दी से पूर्ववत करने में सक्षम होना। इसमें आपके द्वारा गलती से किए गए पूर्ववत भी शामिल हैं—पुनः करें बटन आपको पूर्ववत बटन जितना ही समय और प्रयास बचा सकता है! लेकिन मैक पर पूर्ववत और पुनः कैसे करें? हम आपको सभी

  1. RuboCop के साथ Ruby कोड गुणवत्ता सुधारें: लिंटिंग और ऑटो-फॉर्मेटिंग RuboCop के साथ Ruby कोड गुणवत्ता सुधारें: लिंटिंग और ऑटो-फॉर्मेटिंग

    लिंटिंग प्रोग्रामेटिक और स्टाइलिस्टिक त्रुटियों के लिए सोर्स कोड की स्वचालित जांच है। यह जांच एक स्थैतिक कोड विश्लेषण टूल द्वारा की जाती है जिसे लिंटर कहा जाता है। एक कोड फॉर्मेटर, हालांकि, एक ऐसा टूल है जो सोर्स कोड को फॉर्मेट करने से संबंधित है ताकि यह पूर्व-कॉन्फ़िगर नियमों के सख्ती से पालन करे।

  1. रूबी लॉगिंग में महारत हासिल करें: Logger और Lograge के साथ विशेषज्ञ गाइड रूबी लॉगिंग में महारत हासिल करें: Logger और Lograge के साथ विशेषज्ञ गाइड

    रूबी में लॉग्स के साथ काम करना लॉगिंग उन प्राथमिक कार्यों में से एक है जिसे एक एप्लिकेशन आमतौर पर संबोधित करता है। लॉग्स का उपयोग तब किया जाता है जब आपको आवश्यकता होती है, उदाहरण के लिए, अपने ऐप्स के अंदर क्या हो रहा है, यह देखने के लिए, उनकी निगरानी करने के लिए, या कुछ विशिष्ट डेटा के लिए मेट्रिक्