2011-08-03 23 views
9

निम्नलिखित उदाहरण में - दिया गया है कि वापसी मूल्य किसी भी महत्व का नहीं है - क्या किसी अन्य विधि को प्राथमिकता देने का कोई कारण है?अगर ... बनाम बनाम अगर() {वापसी}

// Method 1 
function (a, b) { 
    if (a == b){ 
    // I'm just interested in 
    // the stuff happening here 
    } else { 
    // or here 
    } 
return true; 
} 

// Method 2 
function (a, b) { 
    if (a == b){ 
    // I'm just interested in 
    // the stuff happening here 
    return true; 
    } 
    // or here 
    return true; 
} 
+1

स्थिति में दूसरे को पसंद करते हैं आप का उपयोग करने के 'चाहते हो सकता है == '=' की बजाय आप तुलना कर रहे हैं, मान सेट नहीं कर रहे हैं। ;) एक साधारण 'एक == बी वापस लौटें;' कभी-कभी चाल चलती है। – Wabbitseason

+0

जिज्ञासा से बाहर, आप एक ऐसी विधि क्यों लिखेंगे जो हमेशा सच हो या वापसी मूल्य का कोई महत्व न हो? क्या कोई किनारे के मामले नहीं हैं? – Kumar

+1

यदि वापसी मूल्य का कोई महत्व नहीं है, तो स्पष्ट रूप से क्यों वापस आते हैं? बस कोड "गिरने" दें। –

उत्तर

3

मैं विधि 1 पसंद करूंगा क्योंकि यह पढ़ने में कम भ्रमित है। इसके अलावा, कम डुप्लिकेट कोड।

+0

यह वास्तव में एक स्टाइल चीज है, एक अधिक घोषणात्मक है (यदि अन्यथा), दूसरा बिखरा हुआ है। मैं दूसरा खुद को बेहतर भी पसंद करता हूं। – IRegretable

+0

मैं असहमत हूं। एकाधिक रिटर्न स्टेटमेंट होने से कोड को पालन करना बहुत कठिन होता है (लगता है कि रिकर्सन!) विशेष रूप से जब इसे टाला जा सकता है। इस मामले में, हम हमेशा सच हो जाते हैं! – adu

+0

आप सही हैं, मेरा मतलब था विधि 1 – hspain

0

मैं विधि 1 की अनुशंसा करता हूं क्योंकि यह अधिक पठनीय और स्वयं दस्तावेज है।

+1

असहमत है कि यह अधिक पठनीय है। अधिक घोंसले आम तौर पर कोड को कम पठनीय बनाता है और इसे खराब अभ्यास माना जाता है। तदनुसार, अन्य शर्त छोड़कर मुझे लगता है कि बेहतर अभ्यास है। – Jeff

+0

लेकिन अगर आप अपने कोड में संपादित करना चाहते हैं, तो क्या आप आसानी से व्यवसाय तर्क को समझ पाएंगे? –

+0

नेस्टेड के कई स्तरों को पढ़ना अगर/elses व्यापार तर्क को समझना मुश्किल है, IMHO। – Jeff

3

मैं कोड और पठनीयता की स्पष्टता पर अपना निर्णय, यानी .:

  • चुनें विधि 1 जब आप अगर ब्लॉक के बाद ब्लॉक में अधिक सामान क्या करने की जरूरत के आधार पर होगा।
  • जब आपको केवल कोड के दो ब्लॉक की आवश्यकता होती है तो विधि 2 चुनें, फिर यह पढ़ने के लिए स्पष्ट है
  • उन मामलों में विधि 1 फिर से चुनें जहां आप स्पष्ट रूप से सोचते हैं कि आपके पाठक आपके क्रिप्टिक कोड को "else" शब्द के बिना नहीं समझेंगे; यह तब आम है जब ब्लॉक कुछ पंक्तियों से बड़े हो जाते हैं।

आज के कई प्रोग्रामर कम इंडेंटेशन को पढ़ने के लिए आसान मानते हैं और मैं सहमत हूं। दूसरी स्थिति में सामान्य प्राथमिकता को किस मामले में जाना चाहिए।

0

यहां पढ़ने योग्यता वास्तव में फ़ंक्शन की भूमिका पर निर्भर करती है।

इस समारोह हमेशा सच वापस आ जाएगी, तो मैं विधि 1 यह स्पष्ट है क्योंकि यह केवल एक ही स्थान पर रिटर्न पसंद करेंगे, और यह देखने के लिए यह हमेशा सच हो जाएगा आसान है।

उपर्युक्त मामले में, विधि 2 अधिक भ्रमित है। यह कई स्थानों पर लौटता है, और इस प्रकार अधिक भ्रमित है। एक डेवलपर पर अनावश्यक रूप से संभावित शाखाओं को घुमाने और फिर यह देखने के लिए कि वे वापसी मूल्य को कैसे प्रभावित करते हैं। इस साधारण मामले में, यह एक सौदे के जितना बड़ा नहीं है, लेकिन जब आप अधिक विस्तृत सशर्त प्राप्त करते हैं, तो मैं वास्तव में इस दृष्टिकोण से बचूंगा।

यदि आपके पास ब्लॉक में बहुत कम कोड है तो मैं केवल विधि 2 का उपयोग करूंगा। ऐसा कुछ जो किनारे के मामले से निपटता है।

उम्मीद है कि मदद करता है।

5

ऐसा लगता है कि सर्वोत्तम प्रथाओं (ज्यादातर स्थानों द्वारा मैंने जिनके लिए काम किया है) एक विधि या फ़ंक्शन के शीर्ष पर डिफ़ॉल्ट मान सेट करना है और कुछ स्थिति होने पर केवल उन मानों को बदलना है। इस प्रकार, अन्यथा उपयोग की आवश्यकता नहीं है इसलिए विधि 2 को प्राथमिकता दी जाती है।

उदाहरण के बाद जावास्क्रिप्ट है, कोड आकार के संबंध में विशेष ध्यान देना होगा। तो विधि 2 समान कार्यक्षमता के लिए कम कोड बनाएगा, इसके तर्क को पसंदीदा के रूप में आगे बढ़ाएगा।

हालांकि, यदि आपके पास 2 से अधिक संभावित स्थितियां हैं, तो कोई और अन्यथा टाला नहीं जा सकता है। हालांकि, मैंने जिन स्थानों पर काम किया है, वे इन परिस्थितियों में स्विच केस पसंद करते हैं।

0

किसी भी आधुनिक ब्राउज़र के दुभाषिया को किसी भी दिशा में किसी भी प्रदर्शन लाभ को खत्म करना चाहिए।

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

-4

यदि वापसी मूल्य किसी भी महत्व का नहीं है तो पहला संस्करण मेरे लिए अधिक पढ़ा जा सकता है, क्योंकि मुझे यह नहीं सोचना चाहिए कि f ** राजा "सत्य" क्या है।

अगर हम return; के बारे में बात करेंगे बजाय return true; मैं पहली पसंद करते हैं वेरिएंट समान रूप से कर रहे हैं (जे एस में यह संभव है?), और मैं की तरह

function doForList($elem){ 
    if($elem.last()) 
     return; //extreme case 
    // A lot of code 

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