2011-03-08 18 views
9

मैं हमेशा अपने जावास्क्रिप्ट ब्लॉकजावास्क्रिप्ट हालत ब्लॉक बनाम नियंत्रण प्रवाह

var functionName = function() { 
    if (someCondition) { 
     // stuff 
    } else { 
     // stuff 
    } 
}; 

लिखा है लेकिन आज के लिए खाली वापसी मैं

var functionName = function() { 
    if (someCondition) { 
    // stuff 
    return; 
    } 
    // stuff 
}; 

देखा मुझे पसंद है कि पहला उदाहरण तर्क में अधिक स्पष्ट है। कुछ कारण क्या हैं जिन्हें आप दूसरे तरीके से प्रदर्शित करना चाहते हैं या नहीं करना चाहते हैं?

+1

कुछ विचारों के लिए http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement देखें – Jimmy

+0

अच्छा! काश मैं अपनी खोज में पाया होगा। धन्यवाद। –

उत्तर

11

यदि आप अधिक someCondition प्राप्त करते हैं तो कम इंडेंटेशन।

कल्पना कीजिए:

var functionName = function() { 
    if (someCondition) { 
     // stuff 
    } else { 
     // stuff 
     if (someConditionB) { 
      // stuff 

     } else { 
      // stuff 

      if (someConditionC) { 
       // stuff 

      } else { 
       // stuff 

       if (someConditionD) { 
        // stuff 
       } else { 
        // stuff 
       } 
      } 
     } 
    } 
}; 

कौन सा सब elses के बिना एक बहुत अधिक पढ़े जा सकेंगे:

var functionName = function() { 
    if (someCondition) { 
     // stuff 
     return; 
    } 

    if (someConditionB) { 
     // stuff 
     return; 
    } 

    if (someConditionC) { 
     // stuff 
     return; 
    } 
    if (someConditionD) { 
     // stuff 
     return; 
    } 

    // stuff 
}; 
1

आप 2 मामलों में विधि 2 का उपयोग करना चाहते हो सकता है:

केस 1: आप अपने तर्क के बाद अधिक सामान है कि आप रन नहीं करना चाहती है। निष्पादित कोड आपको आवश्यकतानुसार करता है और आपको अतिरिक्त सामान की आवश्यकता नहीं होती है।

केस 2: फ़ंक्शन से जुड़ा हुआ होने के आधार पर, आप किसी कार्रवाई को रोकने के लिए झूठी वापसी करना चाहते हैं। एक बार ऐसा उदाहरण एक फॉर्म के लिए onSubmit होगा, और इनपुट को मान्य करेगा। यदि यह बुरा है, तो तुरंत false लौटाएं और फ़ॉर्म को सबमिट करने से रोकें।

4

कई कोडन मानकों जनादेश कि आपको चाहिए कार्यों से नहीं "जल्दी बाहर निकलें"। यह पठनीयता के बीच एक व्यापार-बंद है, और "शुद्धता" [*]

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

दूसरी तरफ, डिबगिंग उद्देश्यों के लिए कोड पढ़ने पर, प्रारंभिक निकास को याद करना आसान होता है, और आपके कोड के गलत हिस्से में एक बग खोजने की कोशिश करता है।

[*] उन कोड मानकों में अक्सर break और continue का उपयोग छोड़ दिया जाता है। एफडब्ल्यूआईडब्ल्यू मुझे लगता है कि यह Djikstra के "GOTO हानिकारक माना जाता है" मंत्र के आवेदन पर एक लक्षण है।

+0

बहुत बढ़िया! यह पठनीयता और मानकों के बीच एक सावधान नृत्य है। धन्यवाद। –

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