2012-12-12 32 views
21

माणिक त्रिगुट ऑपरेटर हम एक सरल यदि किसी और निर्माण के लिए निम्नलिखित तर्क लिख सकते हैं के साथ:रूबी अगर .. els अगर .. एक और लाइन पर?

a = true ? 'a' : 'b' #=> "a" 

लेकिन क्या होगा अगर मैं if foo 'a' elsif bar 'b' else 'c' रूप में यह लिख करना चाहते थे?

मैं निम्नलिखित के रूप में यह लिख सकता है, लेकिन यह पालन करने के लिए थोड़ा मुश्किल है:

foo = true 
a = foo ? 'a' : (bar ? 'b' : 'c') #=> "a" 

foo = false 
bar = true 
a = foo ? 'a' : (bar ? 'b' : 'c') #=> "b" 

वहाँ ऐसे परिदृश्य से निपटने के लिए किसी भी बेहतर विकल्प हैं या अगर हम अगर गाढ़ा करने के लिए इच्छा यह हमारी सबसे अधिक उपयुक्त रहेगी। .elsif..else तर्क एक पंक्ति में?

+3

मुझे लगता है कि नेस्टेड टर्नरी समाधान में पठनीयता की कमी के साथ समस्या यह है कि यह सब एक पंक्ति पर डालने के लिए स्वाभाविक रूप से पढ़ना मुश्किल है, और आप जिन समाधानों के साथ आते हैं उनमें से कोई भी विश्लेषण करना आसान नहीं होगा। –

+5

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

+3

"जितना संभव हो उतना छोटा स्थान जितना संभव हो उतना कोड निचोड़ना कभी वैध लक्ष्य नहीं है।" मशीन कोड को छोड़कर। –

उत्तर

43
a = (foo && "a" or bar && "b" or "c") 

या

a = ("a" if foo) || ("b" if bar) || "c" 
+1

ब्याज का जवाब, सावा। क्या यह एक चाल के रूप में 'या' प्राथमिकता का उपयोग कर रहा है? – sunnyrjuneja

+2

'या' और 'और' '&' 'और' || 'की तुलना में कम सहयोगीता है। – sawa

+2

मुझे यह पसंद है ... 'और' और 'या 'जब तक आप प्राथमिकता सीखते हैं, तब तक दोस्त हैं, जिन्हें हर किसी को चाहिए। –

3

तुम भी लिख सकते हैं:

x = if foo then 'a' elsif bar then 'b' else 'c' end 

हालांकि, इस रूबी में मुहावरेदार स्वरूपण नहीं है।

5

a = if foo then 'a' elsif bar then 'b' else 'c' end

12

Github Ruby Styleguide सिफारिश की है कि एक लाइनर्स तुच्छ के लिए आरक्षित किया है, तो/किसी और बयानों और कि नेस्टेड त्रिगुट ऑपरेटरों से परहेज किया जाना। आप then कीवर्ड का उपयोग कर सकते हैं लेकिन इसे खराब अभ्यास माना जाता है।

if foo then 'a' elsif bar then 'b' else 'c' end 

यदि आप अपने नियंत्रण विवरण अत्यधिक जटिल पाते हैं तो आप मामलों (रूबी के स्विच ऑपरेटर) का उपयोग कर सकते हैं।

+1

'तो foo 'एक' elsif बार तो 'बी' और कुछ 'पर – UsamaMan

+0

धन्यवाद, अब इसे हटाने के लिए – sunnyrjuneja

+1

मैं भूल गया editting' अंत 'सी' के बाद। हमें उसे भी जोड़ना होगा। – UsamaMan