जब भी आपको कुछ if / elsif
. का उपयोग करने की आवश्यकता हो आप इसके बजाय रूबी केस स्टेटमेंट का उपयोग करने पर विचार कर सकते हैं। इस पोस्ट में, आप कुछ अलग उपयोग के मामलों के बारे में जानेंगे और यह सब वास्तव में हुड के तहत कैसे काम करता है।
<ब्लॉकक्वॉट>
नोट:अन्य प्रोग्रामिंग भाषाओं में इसे स्विच . के रूप में जाना जाता है बयान।
रूबी में केस स्टेटमेंट के घटक:
कीवर्ड | विवरण |
---|---|
केस | एक केस स्टेटमेंट परिभाषा शुरू करता है। वह चर लेता है जिसके साथ आप काम करने जा रहे हैं। |
कब | प्रत्येक शर्त जिसका मिलान किया जा सकता है वह एक है जब कथन। |
अन्यथा | अगर कुछ भी मेल नहीं खाता तो ऐसा करें। वैकल्पिक। |
रूबी केस और रेंज
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
जैसा कि आप देख सकते हैं, स्थिति उलट है क्योंकि रूबी ===
calls को कॉल करती है बाईं ओर की वस्तु पर। ===
सिर्फ एक तरीका है जिसे किसी भी वर्ग द्वारा लागू किया जा सकता है। इस मामले में, Range
इस विधि को केवल तभी लागू करता है जब मूल्य सीमा के अंदर पाया जाता है।
इस प्रकार ===
रुबिनियस में लागू किया गया है (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
. का उपयोग करने के समान प्रभाव पड़ता है ।
निष्कर्ष
आपने सीखा कि रूबी केस स्टेटमेंट कैसे काम करता है और यह कितना लचीला हो सकता है। अब आपकी बारी है कि आप अपनी परियोजनाओं में इसका सर्वोत्तम उपयोग करना शुरू करें।
मुझे आशा है कि आपको यह लेख उपयोगी लगा होगा!
कृपया इस पोस्ट को शेयर करें ताकि और लोग सीख सकें!