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

रूबी केस स्टेटमेंट - उन्नत तकनीकें

केस स्टेटमेंट से ज्यादा सरल और उबाऊ कुछ नहीं हो सकता। यह C से होल्डओवर है। आप इसका उपयोग ifs के एक समूह को बदलने के लिए करते हैं। मामला बंद। या है?

दरअसल, रूबी में केस स्टेटमेंट आपकी कल्पना से कहीं अधिक समृद्ध और अधिक जटिल हैं। आइए केवल एक उदाहरण पर एक नज़र डालें:

case "Hi there"
when String
  puts "case statements match class"
end

# outputs: "case statements match class"

यह उदाहरण दिखाता है कि केस स्टेटमेंट न केवल किसी आइटम के मान . से मेल खाते हैं लेकिन इसकी वर्ग . भी . यह संभव है क्योंकि हुड के तहत, रूबी === . का उपयोग करती है ऑपरेटर, उर्फ। तीन बराबर ऑपरेटर।

=== का एक त्वरित दौरा ऑपरेटर

जब आप x === y write लिखते हैं y रूबी में, आप पूछ रहे हैं "क्या y x द्वारा दर्शाए गए समूह में है?" यह एक बहुत ही सामान्य कथन है। आप जिस प्रकार के समूह के साथ काम कर रहे हैं, उसके आधार पर विवरण अलग-अलग होते हैं।

# Here, the Class.===(item) method is called, which returns true if item is an instance of the class 

String === "hello" # true
String === 1 # false


स्ट्रिंग्स, रेगुलर एक्सप्रेशन और रेंज सभी अपने-अपने ===(item) . को परिभाषित करते हैं तरीके, जो आपकी अपेक्षा के अनुरूप कमोबेश व्यवहार करते हैं। आप अपनी कक्षाओं में एक तिहाई बराबर विधि भी जोड़ सकते हैं।

अब जब हम यह जान गए हैं, तो हम केस के साथ हर तरह की चालें कर सकते हैं।

केस स्टेटमेंट में मैचिंग रेंज

आप केस स्टेटमेंट में रेंज का उपयोग कर सकते हैं, इस तथ्य के लिए धन्यवाद कि range === n बस range.include?(n) . का मान लौटाता है . मुझे इतना यकीन कैसे हो सकता है? यह डॉक्स में है।

case 5
when (1..10)
  puts "case statements match inclusion in a range"
end

# outputs "case statements match inclusion in a range"

केस स्टेटमेंट के साथ रेगुलर एक्सप्रेशन का मिलान

केस स्टेटमेंट में रेगेक्स का इस्तेमाल करना भी संभव है, क्योंकि /regexp/ === "string" केवल तभी सत्य लौटाता है जब स्ट्रिंग नियमित अभिव्यक्ति से मेल खाती है। Regexp . के लिए दस्तावेज़ इसे समझाएं।

case "FOOBAR"
when /BAR$/
  puts "they can match regular expressions!"
end

# outputs "they can match regular expressions!"

मैचिंग प्रोसेस और लैम्बडास

यह एक अजीब तरह का है। जब आप उपयोग करते हैं   Proc#===(item) , यह Proc#call(item) . करने जैसा ही है . इसके लिए यहां दस्तावेज़ हैं। इसका मतलब यह है कि आप अपने केस स्टेटमेंट में डायनामिक मैचर्स के रूप में लैम्ब्डा और प्रोसेस का उपयोग कर सकते हैं।

case 40
when -> (n) { n.to_s == "40" }
  puts "lambdas!"
end

# outputs "lambdas"

अपनी खुद की मैचर क्लासेस लिखना

जैसा कि मैंने ऊपर उल्लेख किया है, अपनी कक्षाओं में कस्टम केस व्यवहार जोड़ना उतना ही सरल है जितना कि अपने स्वयं के === को परिभाषित करना तरीका। इसके लिए एक उपयोग जटिल सशर्त तर्क को कई छोटे वर्गों में खींचना हो सकता है। मैंने नीचे दिए गए उदाहरण में यह बताया है कि यह कैसे काम कर सकता है:

class Success
  def self.===(item)
    item.status >= 200 && item.status < 300
  end
end

class Empty
  def self.===(item)
    item.response_size == 0
  end
end

case http_response
when Empty
  puts "response was empty"
when Success
  puts "response was a success"
end

  1. जावास्क्रिप्ट में स्विच...केस स्टेटमेंट क्या है?

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

  1. क्या हमारे पास जावास्क्रिप्ट स्विच स्टेटमेंट में रिटर्न स्टेटमेंट हो सकता है?

    जावास्क्रिप्ट स्विच स्टेटमेंट में रिटर्न स्टेटमेंट हो सकते हैं यदि यह किसी फ़ंक्शन के अंदर मौजूद है। फ़ंक्शन स्विच स्टेटमेंट में मान लौटाएगा और स्विच स्टेटमेंट के बाद कोड निष्पादित नहीं किया जाएगा। जावास्क्रिप्ट स्विच स्टेटमेंट में रिटर्न स्टेटमेंट रखने के लिए कोड निम्नलिखित है - उदाहरण दस्तावेज़ ब

  1. C++ में निर्णय लेना

    निर्णय लेने वाली संरचनाओं के लिए आवश्यक है कि प्रोग्रामर प्रोग्राम द्वारा मूल्यांकन या परीक्षण करने के लिए एक या अधिक शर्तों को निर्दिष्ट करे, साथ ही एक स्टेटमेंट या स्टेटमेंट को निष्पादित करने के लिए यदि शर्त सही है, और वैकल्पिक रूप से, अन्य स्टेटमेंट्स को निष्पादित किया जाना है यदि शर्त झूठा होना