2016-10-21 8 views
5

(मैंने "अन्यथा रेंज" की खोज की लेकिन मेरे प्रश्न का उत्तर देने वाली किसी भी पोस्ट के साथ नहीं आया)।क्या यह स्पष्ट रूप से राज्य सीमाओं के लिए हानिकारक है यदि अन्यथा बयानों में?

अगर .. elseif .. किसी और कुछ (परस्पर अनन्य) पर्वतमाला में एक चर जा रहा है के आधार पर क्या करना है का चयन करने के का उपयोग करते समय, मैं स्पष्ट रूप से पर्वतमाला का उल्लेख करना चाहते:

int num = 55; 
String message; 

if (num >= 20) { 
    // update message variable 
    message = "Bigger or equal to than 20"; 
} 
else if (10 <= num && num < 20) { 
    // update message variable 
} 
else if (0 <= num && num < 10) { 
    // update message variable 
} 
else if (num < 0) { 
    // update message variable 
} 

System.out.println(message); 

लेकिन सभी पाठ्यपुस्तकों और व्याख्यान नोट्स मैं देख रहा हूँ इस तरह इस तरह के एक उदाहरण के बारे में:

int num = 55; 
String message; 

if (num >= 20) { 
    // update message variable 
    message = "Bigger or equal to than 20"; 
} 
else if (num >= 10) { 
    // update message variable 
} 
else if (num >= 0) { 
    // update message variable 
} 
else { 
    // update message variable 
} 

System.out.println(message); 

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

उत्तर

2

यदि मैं कुछ कोड बना रहा हूं जो कि किसी अन्य वाहन पर सफलतापूर्वक उतरने के लिए किसी प्रकार का वाहन चलाएगा तो मैं हमेशा स्पष्टता के लिए मोटा होगा। याद रखें कि कोड की एक पंक्ति एक बार लिखा जाएगा लेकिन सैकड़ों बार पढ़ा जा सकता है। आपका पहला स्निपेट 4am डिबगिंग सत्र के दौरान समझना बहुत आसान होगा।

आपका पहला तरीका वास्तव में बहुत स्पष्ट है और अगर कोई गलती रिफैक्टरोर सशर्त जांच को रोकता है तो बग पेश नहीं किए जाएंगे।

मैं हमेशा } else { के साथ समाप्त होता हूं, हालांकि आदर्श नियंत्रण किसी भी प्रकार के दावे के साथ आदर्श रूप से नहीं पहुंचता है।

+3

मैं रिफैक्टरिंग भाग से असहमत: पहला संस्करण भी बहुत त्रुटियों पुनर्रचना क्योंकि आप सुनिश्चित करें कि प्रत्येक रेंज की ऊपरी सीमा वास्तव में अगले एक की निचली सीमा है करना है की संभावना है। –

+1

मुझे लगता है कि चिंता का विषय है [एंडी थॉमस द्वारा जवाब] में उठाया (http://stackoverflow.com/a/40183548/5221149) बयान के अगर-elseif-elseif अनुक्रम उलटफेर किसी की तुलना में एक अधिक यथार्थवादी चिंता का विषय है। कुछ भी साकार 'कि else' बिना निर्माण उस तरह का उलटफेर करने के लिए पर्याप्त गूंगा पर' if' लागू किया जाना चाहिए निर्भर करता है। – Andreas

7

अपने आप को दोहराना न करें।

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

  • यह मूल्यों में से किसी एक को बदलकर रखरखाव के दौरान त्रुटियों को पेश करना आसान बनाता है, लेकिन दूसरा नहीं।
  • निष्पादन के दौरान यह एक अनावश्यक जांच करता है। यदि आप else if में हैं, तो आप पहले ही जानते हैं कि पूर्व शर्त गलत थी।
  • कोड में कोई अतिरिक्त जानकारी जोड़ने के बिना लंबी है। यह समय लेता है पढ़ने के लिए, और लंबे समय तक निरीक्षण करने के लिए।

बाद में रखरखाव मूल्यों में से एक को बदल सकता है, लेकिन दूसरे नहीं, जिससे कुछ आश्चर्यजनक व्यवहार हो सकता है।

if (num >= 30) { 
    // update message variable 
} 
else if (10 <= num && num < 20) { // Whoops! 
    // update message variable 
} 
... 

आप प्रत्येक मूल्य के लिए निरंतर परिभाषित करके इसे टाल सकते हैं। लेकिन फिर आपका कोड अभी भी एक अनावश्यक जांच निर्दिष्ट कर रहा है।

final int HIGH = 20; 
final int MEDIUM = 10; 
final int LOW = 0; 

if (num >= HIGH) { 
    // update message variable 
} 
else if (MEDIUM <= num && num < HIGH) { // We already know num<HIGH 
    // update message variable 
} 
... 
+0

कितना दिलचस्प है; मैंने कभी "बाद में रखरखाव" चिंता के बारे में सोचा नहीं। तो ऐसा लगता है कि प्रत्येक दृष्टिकोण के लिए पेशेवर और विपक्ष हैं। मुझे आश्चर्य है कि क्या कोई उद्योग मानक है जो मुझे कुछ आधिकारिक मार्गदर्शन दे सकता है? – silph

+1

@silph "बाद में रखरखाव" हमेशा वास्तविक जीवन में एक चिंता है। एक स्कूल असाइनमेंट में यह नहीं हो सकता है, लेकिन ऐसा सोचना शुरू करना अच्छा है। – Andreas

+0

@ एंड्रियास, लेकिन मैंने अप्रचलित कोड को अचूक कोड देखा है। बाद में रखरखाव के बारे में सोचने से अक्सर विचारधारा होती है। विचारधारा अंधेरे से लागू पैटर्न की ओर जाता है। – HopefullyHelpful

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