2017-06-09 6 views
5

मैं हाल ही में एक सहयोगी के साथ निम्नलिखित रूबी वाक्य रचना चर्चा कर रहा था:परिवर्तनीय असाइनमेंट के बाद कथन - कितना आम है?

value = if a == 0 
      "foo" 
     elsif a > 42 
      "bar" 
     else 
      "fizz" 
     end 

मैं तर्क की इस तरह ज्यादा व्यक्तिगत रूप से नहीं देखा है, लेकिन अपने साथी लिखते हैं कि यह वास्तव में एक बहुत ही आम Rubyism है। मैंने इस विषय को गुमराह करने की कोशिश की और मुझे कोई लेख, पेज, या एसओ सवाल नहीं मिला, मुझे विश्वास है कि यह एक बहुत ही तथ्यपूर्ण तकनीक हो सकती है। एक अन्य सहयोगी, तथापि, वाक्य रचना भ्रामक पाता है और बजाय इस तरह से ऊपर तर्क लिखना होगा:

if a == 0 
    value = "foo" 
elsif a > 42 
    value = "bar" 
else 
    value = "fizz" 
end 

नुकसान वहाँ value = के बार-बार घोषणाओं और एक अंतर्निहित else nil के नुकसान किया जा रहा है, अगर हम इसका इस्तेमाल करना चाहता था। यह भी रूबी में पाए जाने वाले कई अन्य वाक्य रचनात्मक चीनी विशेषताओं के साथ लाइनों की तरह लगता है।

मेरा सवाल है, रूबी में यह तकनीक कितनी आम है? क्या इस बात पर सर्वसम्मति है कि समुदाय को ऐसा लगता है कि इसका इस्तेमाल किया जाना चाहिए या इससे बचा जाना चाहिए?

+1

मैं कहूंगा, यह काफी मूर्खतापूर्ण है। मैं अक्सर इसका इस्तेमाल करता हूं। –

+2

नोट: यह 'if' कथन नहीं है, यह एक 'if' * अभिव्यक्ति * है, जो ठीक है * क्यों * यह पहली जगह में काम करता है। (वास्तव में, रूबी में कोई बयान नहीं है, सबकुछ एक अभिव्यक्ति है और सब कुछ एक मूल्य देता है।) –

+0

यह 'x = case (y) के समान है; जब .... 'और' x = (वाई = 3)? 3: 1', जो आम हैं। –

उत्तर

4

तथ्य यह है कि if और case वापसी मान कुछ बहुत, तंग सुथरा, और अभी तक अभी भी समझ में आता है कोड के लिए बनाता है। जब आप ब्रांचिंग के माध्यम से असाइनमेंट से निपट रहे हों तो रूबी में यह एक आम पैटर्न है।

तरह से मैं स्वरूपण इन असाइनमेंट स्पष्ट करना खरोज का एक स्तर लागू करने के लिए है दृष्टिकोण जाते हैं, लेकिन बहुत ज्यादा नहीं "पुश" बहुत दूर में कोड:

value = 
    if a == 0 
    "foo" 
    elsif a > 42 
    "bar" 
    else 
    "fizz" 
    end 

या यदि आप एक case चाहते :

def value(a) 
    if a == 0 
    "foo" 
    elsif a > 42 
    "bar" 
    else 
    "fizz" 
    end 
end 
0:

value = 
    case 
    when a == 0 
    "foo" 
    when a > 42 
    "bar" 
    else 
    "fizz" 
    end 

कई मामलों में आप एक विधि एक if निकाय के रूप में है कि देखेंगे परिणाम निर्धारित करने के लिए

फिर कोई कर्कश इंडेंटेशन आवश्यक नहीं है।

6
value = if condition 
      x 
     else 
      y 
     end 

आम है। यह खुद को इस स्थिति को साफ करने के लिए उधार देता है:

if condition 
    value = x 
else 
    value = y 
end 

इस रूबी शैली मार्गदर्शिका को देखें। रूबी कोड कैसे लिखा जाना चाहिए यह एक लोकप्रिय गाइड है।

https://github.com/bbatsov/ruby-style-guide#use-if-case-returns

+0

जब, यहां तक ​​कि 'elsif' कोई टर्नरी अभिव्यक्ति कॉम्पैक्ट नहीं है और अच्छी तरह से पढ़ता है: 'value = condition? एक्स: वाई'। –

संबंधित मुद्दे

 संबंधित मुद्दे