जब भी आपको कुछ if / elsif स्टेटमेंट्स का उपयोग करने की आवश्यकता होती है तो आप इसके बजाय रूबी केस स्टेटमेंट का उपयोग करने पर विचार कर सकते हैं। इस पोस्ट में, आप कुछ अलग उपयोग के मामले सीखेंगे और यह वास्तव में हुड के नीचे कैसे काम करता है।

नोट: अन्य प्रोग्रामिंग भाषाओं में इसे स्विच स्टेटमेंट के रूप में जाना जाता है।
रूबी में केस स्टेटमेंट के घटक:
| कीवर्ड | विवरण |
|---|---|
| case | केस स्टेटमेंट परिभाषा शुरू करता है। वह वेरिएबल लेता है जिसके साथ आप काम करने जा रहे हैं। |
| when | हर शर्त जिसे मिलान किया जा सकता है वह एक when स्टेटमेंट है। |
| else | यदि कुछ भी मेल नहीं खाता तो यह करें। वैकल्पिक। |
रूबी केस और रेंज
case स्टेटमेंट पहली नज़र में जितना लचीला लग सकता है उससे अधिक लचीला है। आइए एक उदाहरण देखते हैं जहां हम इस आधार पर कुछ संदेश प्रिंट करना चाहते हैं कि कोई मान किस रेंज में आता है।
case capacity
when 0
"You ran out of gas."
when 1..20
"The tank is almost empty. Quickly, find a gas station!"
when 21..70
"You should be ok for now."
when 71..100
"The tank is almost full."
else
"Error: capacity has an invalid value (#{capacity})"
end
मुझे लगता है कि यह कोड if / elsif संस्करण की तुलना में काफी सुंदर है।
रूबी केस और रेगेक्स
आप अपने when शर्त के रूप में नियमित अभिव्यक्तियों का भी उपयोग कर सकते हैं। निम्नलिखित उदाहरण में हमारे पास एक serial_code है जिसका प्रारंभिक अक्षर हमें बताता है कि इस उत्पाद का उपभोग करना कितना जोखिम भरा है।
case serial_code when /\AC/ "Low risk" when /\AL/ "Medium risk" when /\AX/ "High risk" else "Unknown risk" end
रूबी केस का उपयोग कब न करें
जब आपके पास एक सरल 1:1 मैपिंग होती है, तो आप ऐसा कुछ करने के लिए ललचा सकते हैं।
case country when "europe" "https://eu.example.com" when "america" "https://us.example.com" end
मेरी राय में इसके बजाय यह करना बेहतर होगा:
SITES = {
"europe" => "https://eu.example.com",
"america" => "https://us.example.com"
}
SITES[country]
हैश समाधान अधिक कुशल और काम करने में आसान है। क्या आपको नहीं लगता?
केस कैसे काम करता है: === मेथड
आप सोच रहे होंगे कि case हुड के नीचे कैसे काम करता है। यदि हम अपने पहले उदाहरण पर वापस जाते हैं, तो यह वही हो रहा है:
(1..20) === capacity (21..70) === capacity (71..100) === capacity
जैसा कि आप देख सकते हैं, शर्त उलट जाती है क्योंकि रूबी बाईं ओर के ऑब्जेक्ट पर === कॉल करता है। === बस एक मेथड है जिसे किसी भी क्लास द्वारा लागू किया जा सकता है। इस मामले में, Range इस मेथड को तभी true लौटाकर लागू करता है जब मान रेंज के अंदर पाया जाता है।
यह है कि === रूबिनियस में कैसे लागू किया गया है (Range क्लास के लिए):
def ===(value) include?(value) end
स्रोत: https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178
प्रॉक्स + केस
=== को लागू करने वाला एक और दिलचस्प क्लास Proc क्लास है।
संबंधित पोस्ट: प्रॉक्स और लैम्ब्डा के बारे में अधिक जानें।
इस उदाहरण में मैं दो procs परिभाषित करता हूं, एक even नंबर की जांच के लिए, और दूसरा odd के लिए।
odd = proc(&:odd?) even = proc(&:even?) case number when odd puts "Odd number" when even puts "Even number" end
यह वास्तव में क्या हो रहा है:
odd.===(number) even.===(number)
=== का उपयोग प्रॉक्स पर करने का वही प्रभाव होता है जो call का उपयोग करने का होता है।
निष्कर्ष
आपने सीखा कि रूबी केस स्टेटमेंट कैसे काम करता है और यह कितना लचीला हो सकता है। अब आपकी बारी है कि आप अपने खुद के प्रोजेक्ट्स में इसका सर्वोत्तम उपयोग करना शुरू करें।
मुझे आशा है कि आपको यह लेख उपयोगी लगा!
कृपया इस पोस्ट को शेयर करें ताकि अधिक लोग सीख सकें! 🙂