2016-07-28 16 views
12

else कथन के बारे में राय मौजूद है कि हमें इसे unless के साथ उपयोग नहीं करना चाहिए?क्या हम कथन के बिना अन्य का उपयोग करते हैं?

क्या कोई यह समझा सकता है कि यह क्यों है, या हम जहां भी चाहें वहां जाने के लिए स्वतंत्र हैं?

+8

जब तक कि समझना मुश्किल न हो, और इसे आसानी से किसी और के साथ बदला जा सकता है। – Santhosh

+0

अन्य भाषा में अन्य वाक्यविन्यास मौजूद है। और यदि यह जावास्क्रिप्ट में नहीं है तो एक और सवाल उठता है कि यह जावास्क्रिप्ट –

+39

में क्यों नहीं है जब तक कि पाठक का अनुसरण करना मुश्किल न हो, यह ठीक है। अन्यथा ऐसा मत करो। –

उत्तर

22

आप निश्चित रूप से unless के साथ else का उपयोग कर सकते हैं। उदा .:

x=1 
unless x>2 
    puts "x is 2 or less" 
else 
    puts "x is greater than 2" 
end 

"x 2 या उससे कम" प्रिंट करेगा।

लेकिन सिर्फ इसलिए कि आप कर सकते हैं इसका मतलब यह नहीं है कि होना चाहिए। प्रायः, इन निर्माणों को पढ़ने के लिए जटिल हैं, और आप बेहतर वाक्यांश के लिए एक सकारात्मक रास्ते में अपनी हालत परोसा जा चाहते हैं, एक सरल if का उपयोग कर:

x=1 
if x<=2 
    puts "x is 2 or less" 
else 
    puts "x is greater than 2" 
end 
16

हां, हम unlesselse के साथ उपयोग कर सकते हैं। हम जहां भी चाहें वहां जाने के लिए स्वतंत्र हैं लेकिन कुछ लोगों की राय है कि unless के साथ उपयोग करने की अच्छी आदत नहीं है। हमें इससे बचने की जरूरत है।

दुर्भाग्यवश, जब तक कि कथन केवल अन्यथा समर्थन नहीं करता है, इसमें इसके अलावा या अन्यथा नहीं है।

unless true 
    puts "one" 
elsif true 
    puts "two" 
else 
    puts "three" 
end 

SyntaxError: compile error 
syntax error, unexpected kELSIF, expecting kEND 

यह भी कारण है कि यह हमें प्रतिबंधित करता है।

+7

उन लोगों के लिए जो भ्रम पसंद करते हैं, 'जब तक कि' कारण न हो, मैं न केवल 'elsif' बल्कि' elsunless 'जोड़ने का प्रस्ताव करता हूं। – CompuChip

+0

बेशक, चूंकि "एल्सिफ़" दूसरे के अंदर घोंसले के लिए सिर्फ छोटा हाथ है, तो आप हमेशा तब तक लिख सकते हैं जब तक कि ... अन्य {जब तक ... अन्य {जब तक ...}}। 6 महीने के समय में इसे डिबगिंग का आनंद लें, हालांकि ... – IMSoP

+0

यदि यह 'रखता है' तीन काम करता है "कभी निष्पादित नहीं किया जाएगा। –

5

unless else का उपयोग करने से किसी को भी रोक नहीं रहा है। यह पूरी तरह से मान्य है।

लेकिन unless else समझने के लिए मुश्किल है, और यह हमेशा आसानी से एक if else

जैसे के साथ बदला जा सकता है:

unless arr.empty? 
    stmnt_a 
else 
    stmnt_b 
end 


if arr.empty? 
    stmnt_b 
else 
    stmnt_a 
end 

के ऊपर आसान है कौन सा समझने के लिए?

+2

दोनों को समझना आसान है। दिन के अंत में डेवलपर का निर्णय। दूसरी बार रेल डेवलपर अक्सर उपयोग करते हैं जब तक कि उन्हें समझना उनके लिए आसान नहीं है। –

+0

मेरा उदाहरण मेरा बुरा था।जिस व्यक्ति ने कोड लिखा वह आसानी से समझ सकता है। लेकिन किसी अन्य व्यक्ति को कोड देखने के लिए, यह थोड़ा उलझन में मिल सकता है। इसके अलावा, हम तब तक बात कर रहे हैं जब तक कि अन्य शर्त न हो। – Santhosh

+1

रेल डेवलपर इसका उपयोग अक्सर कर सकते हैं और इस प्रकार 'जब तक', I - गैर-रेल डेवलपर के रूप में कोई समस्या नहीं है - करते हैं। एक बार मुझे मिला एक आदर्श वाक्य है: ["अस्वीकार की अनावश्यक परतों के साथ अपने (बुलियन) कथन को अस्पष्ट न करें"। (Https://schneide.wordpress.com/2014/08/03/dont-ever-not -वॉइड-नकारात्मक-तर्क /) –

0

यदि सशर्त झूठ है तो कोड निष्पादित करता है। यदि सशर्त सत्य है, तो अन्य खंड में निर्दिष्ट कोड निष्पादित किया गया है।

x=1 
unless x>2 
    puts "x is less than 2" 
else 
    puts "x is greater than 2" 
end 

हम तब तक और अधिक खराब दृष्टिकोण के साथ उपयोग कर सकते हैं।

4

हाँ हम else साथ unless उपयोग कर सकते हैं। लेकिन

unless foo 
    # Foo 
else 
    #Bar 
end 

लिखना सबसे अच्छा अभ्यास नहीं है यह अधिक पठनीय कोड नहीं है। Here कुछ रूबी कोडिंग शैली मार्गदर्शिका है जो अधिकांश डेवलपर्स का पालन करती है।

+0

हां, धन्यवाद, मैं लिंक अपडेट करता हूं – hgsongra

2

तकनीकी तौर पर यह एक else के साथ एक unless उपयोग करने के लिए बिल्कुल ठीक है:

unless user.staff? 
    # do foo 
else 
    # do bar 
end 

केवल समस्या यह है कि यह कभी कभी मुश्किल है पढ़ने के लिए और समझने के लिए है।चूंकि कोड लिखित से अधिक बार पढ़ा जाता है, इसलिए इसे पढ़ने में ध्यान केंद्रित करने और भविष्य में अन्य डेवलपर्स के लिए समझने में आसान कोड लिखने के लिए बहुत अधिक समझदारी होती है।

if user.customer? 
    # do bar 
else 
    # do foo 
end 

if true बस में पार्स करने के लिए समझने के लिए आसान और सरल है:

if !user.staff? 
    # do bar 
else 
    # do foo 
end 

या और भी बेहतर बनाने हालत पूरी तरह से से निषेध निकालें:

इसलिए आप के लिए इसे बदलने के लिए चाहते हो सकता है आप if !true या unless true से आगे बढ़ते हैं। अस्वीकृति से निपटना (या कभी-कभी दोहरा नकारात्मक) आपको दो बार सोचता है। इसलिए समुदाय इससे बचने की कोशिश करता है।

लेकिन तकनीकी रूप से यह ठीक है ...

4

रूबी यह अनुमति देता है, लेकिन अंग्रेजी में "अगर ... किसी और" (या "अगर ... अन्यथा") जबकि "जब तक एक आम निर्माण है। .. else "उस बिंदु पर काफी अनसुना है, जहां कई देशी वक्ताओं इसे गलत मानेंगे।

यह रूबी में unless/else के साथ कुछ भ्रम में परिणाम देता है। जिन लोगों की मूल भाषा इसे अनुमति नहीं देती है, उनका उपयोग करने के लिए इसका उपयोग नहीं किया जाता है। यही कारण है कि इसके खिलाफ कई राय हैं। चूंकि रुबी इसका समर्थन करता है, वैसे भी आप इसे वैसे भी करने के लिए स्वतंत्र हैं।

1

यह उचित (किसी भी वैकल्पिक की तुलना में अधिक पठनीय) unless ... else ... उपयोग करने के लिए हो सकता है जब else ब्लॉक में कोड बहुत लंबा है और unless ब्लॉक में कोड बहुत ही कम है।

unless user.staff? 
    raise SecurityError, 'not authorized' 
else 
    # ... 
    # ... 
    # ... lots of code 
    # ... 
    # ... 
end 

आप इस दूसरी तरह के आसपास लिखी है,

if user.staff? 
    # ... 
    # ... 
    # ... lots of code 
    # ... 
    # ... 
else 
    raise SecurityError, 'not authorized' 
end 

बाकी-खंड अब तक इसकी शर्त यह है कि आप लोगों को ऊपर स्क्रॉल बनाने होगी और नीचे बातें सीधे रखने के लिए निकाला जा सकता है उनके सिर में

यह विशेष रूप से उदाहरण बेहतर सब पर एक else बिना लिखा है ...

unless user.staff? 
    raise SecurityError, 'not authorized' 
end 

# ... 
# ... 
# ... lots of code 
# ... 
# ... 

... लेकिन यह है कि परिवर्तन हमेशा संभव नहीं है।

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