2010-12-06 16 views
9

यहाँ कुछ काल्पनिक कोड नमूना है:प्रारंभिक रिटर्न बनाम सकारात्मक नेस्ट अगर बयान

if (e.KeyCode == Keys.Enter) 
{ 
    if (this.CurrentElement == null) { 
     return false;} 

    if (this.CurrentElement == this.MasterElement) { 
     return false;} 

    if (!Validator.Exist (this.CurrentElement)) { 
     return false;} 

    if (!Identifier.IsPictureElement (this.CurrentElement)) { 
     return false;} 

    this.FlattenObjects(this.CurrentElement); 
} 

वी.एस.

if (e.KeyCode == Keys.Enter) 
{ 
    if (this.CurrentElement != null) { 

     if (this.CurrentElement != this.MasterElement) { 

      if (Validator.Exist (this.CurrentElement)) { 

       if (Identifier.IsPictureElement (this.CurrentElement)) { 

        this.FlattenObjects(this.CurrentElement);}}}}}} 

} 

कौन सा आपको लगता है पठनीयता, रखरखाव, आदि के मामले में बेहतर है?

इसके अलावा दूसरा उदाहरण कोष्ठक के विभिन्न उपयोग के माध्यम से अलग-अलग स्वरूपित किया जा सकता है।

+18

यह मैंने कभी देखा है सबसे खराब ब्रेस शैलियों में से एक है। – SLaks

+0

हे, मैंने वास्तव में कुछ वास्तविक कोड देखा। लेकिन खेद है कि मैं इसे इस तरह टाइप करने के लिए पहुंचा, यह उचित ब्रैकेटिंग के साथ बेहतर लगेगा। –

+1

http://stackoverflow.com/questions/237719/what-is-the-most-frustrating-programming-style-youve-encountered/930831#930831 – SLaks

उत्तर

14

प्रारंभिक रिटर्न अधिक पढ़ने योग्य हैं।

जब भी आपको किसी विधि के अंदर घोंसले के चार या पांच से अधिक स्तर मिलते हैं, तो उस विधि को दोबारा करने का समय आता है।

एक एकल if एक || खंड के साथ कभी कभी अधिक पठनीय हो सकता है:

if (this.CurrentElement == null 
|| this.CurrentElement == this.MasterElement 
|| !Validator.Exist(this.CurrentElement) 
|| !Identifier.IsPictureElement(this.CurrentElement)) 
    return false; 
+0

धन्यवाद, यह दिलचस्प शैली है। लेकिन आप इसे घोंसले के 4-5 स्तरों के साथ कैसे प्रारूपित करेंगे, जिसका अर्थ है 4-5 चेक, है ना? तो उपर्युक्त विधि, क्या आप इसे विभिन्न तरीकों से तोड़ने के संदर्भ में दोबारा प्रतिक्रिया देंगे? –

+0

@ जोन: यह पूरी तरह से कोड पर निर्भर करता है। हालांकि, हो सकता है कि आप एक अलग विधि बनाना चाहें जो सभी सत्यापन करता है और 'सत्य' या 'झूठा' देता है। – SLaks

+0

धन्यवाद, समझ गया। कभी-कभी, आपको ये बहुत ही अनूठे अद्वितीय मामले मिलते हैं जिनके लिए बहुत से चेक की आवश्यकता होती है लेकिन आसानी से कम तरीकों से संयुक्त नहीं किया जा सकता है, लेकिन मुझे लगता है कि आपका क्या मतलब है। –

1

मुझे लगता है कि मुझे यह पसंद है लिखना होगा:

if (this.CurrentElement == null OR this.CurrentElement == this.MasterElement OR ...) return false; 
+0

तो क्या मैं, लेकिन कई पंक्तियों और सही वाक्यविन्यास के साथ। – SLaks

+0

न्यूलाइन के साथ ओनी? –

+0

धन्यवाद, लेकिन जब मैं ऐसा करता हूं तो लाइनें कभी-कभी लंबी होती हैं, 6 चेक के साथ कहें। –

4

पहला उदाहरण हर तरह से बेहतर है। यह आसान है, और पढ़ने के लिए आसान है। कुछ लोग कहते हैं कि प्रत्येक समारोह में एक ही वापसी बिंदु होना चाहिए; यह उदाहरण स्पष्ट रूप से दिखाता है कि वे लोग गलत क्यों हैं। आदि

if (this.CurrentElement == null) return false; 

यह और भी आसान है, और भी पढ़ने के लिए आसान बनाता है:

पुनश्च व्यक्तिगत तौर पर मैं उन सभी ज़रूरत से ज़्यादा कर्ली कोष्ठक को दूर करेंगे।

+0

मुझे लगता है कि ज्यादातर लोगों को एकल प्रविष्टि/एकल निकास का गलत विचार मिल गया है - देखें [यह पोस्ट] (http://softwareengineering.stackexchange.com/a/118793) – andreee

1

मैं कहूंगा कि पहले पठनीयता और रखरखाव के लिए बेहतर है। हालांकि, मैं शायद इसे इस तरह कुछ लिखूंगा।

if (e.KeyCode == Keys.Enter) { 
    if(this.CurrentElement == null || 
     this.CurrentElement == this.MasterElement || 
     !validator.exists(this.CurrentElement) || 
     !identifier.isPictureElement(this.CurrentElement)) 
    { 
     return false; 
    { 
    else 
    { 
     this.flattenObjects(this.CurrentElement); 
    } 
} 
+0

धन्यवाद लेकिन कक्षाएं नहीं हैं, विधियों को पास्कलकेस माना जाता है? –

+0

मैं जावा मान रहा था, और वह वैधकर्ता/पहचानकर्ता वस्तुएं थीं। – OrangeDog

+0

ठीक है, मैं देखता हूं कि आपका क्या मतलब है। हाँ मैं हमेशा सी #/नेट मोड में सोच रहा हूं लेकिन यह तकनीक अभी भी बिल्कुल मान्य है। –

1

यह देखते हुए कि दूसरे उदाहरण में "गलत" सभी रास्ते के लिए बदले है लेकिन यह अंतर्निहित बजाय घोषित क्यों बस सभी रिटर्न परोक्ष झूठी नहीं और केवल एक शर्त यह है कि अद्वितीय है के लिए परीक्षण है?

यह किसी के स्टाइल दिशानिर्देशों का उल्लंघन कर सकता है लेकिन तर्कसंगत रूप से सबसे संक्षिप्त है।

if(e.KeyCode == Keys.Enter 
&& this.CurrentElement != null 
&& this.CurrentElement != this.MasterElement 
&& Validator.Exist (this.CurrentElement)      
&& Identifier.IsPictureElement (this.CurrentElement)) 
    this.FlattenObjects(this.CurrentElement); 
संबंधित मुद्दे