2011-05-24 17 views
133

विकल्प 1 वापसी का उपयोग कर स्विच: -जावास्क्रिप्ट में, ब्रेक का उपयोग करने से बेहतर अभ्यास माना जाता है, एक स्विच स्टेटमेंट से बाहर लौट रहा है? -

function myFunction(opt) 
{ 
    switch (opt) 
    { 
     case 1: return "One"; 
     case 2: return "Two"; 
     case 3: return "Three"; 

     default: return ""; 
    }  
} 

विकल्प 2 को तोड़ने का उपयोग कर स्विच:

function myFunction(opt) 
{ 
    var retVal = ""; 

    switch (opt) 
    { 
     case 1: 
      retVal = "One"; 
      break; 

     case 2: 
      retVal = "Two"; 
      break; 

     case 3: 
      retVal = "Three"; 
      break; 
    } 

    return retVal; 
} 

मुझे पता है कि दोनों काम करते हैं, लेकिन एक सबसे अच्छा अभ्यास में से एक अधिक है? मुझे विकल्प 1 पसंद है - रिटर्न का उपयोग करके स्विच सबसे अच्छा, क्योंकि यह क्लीनर और सरल है।


Here is a jsFiddle of my specific example using the technique mentioned in @ic3b3rg's comments:

var SFAIC = {}; 

SFAIC.common = 
{ 
    masterPages: 
    { 
     cs: "CS_", 
     cp: "CP_" 
    }, 

    contentPages: 
    { 
     cs: "CSContent_", 
     cp: "CPContent_"  
    } 
}; 

function getElementPrefix(page) 
{ 
    return (page in SFAIC.common.masterPages) 
     ? SFAIC.common.masterPages[page] 
     : (page in SFAIC.common.contentPages) 
      ? SFAIC.common.contentPages[page] 
      : undefined; 
} 

फ़ंक्शन को कॉल करने के लिए, मैं निम्नलिखित तरीके में ऐसा होगा:

getElementPrefix(SFAIC.common.masterPages.cs); 
getElementPrefix(SFAIC.common.masterPages.cp); 
getElementPrefix(SFAIC.common.contentPages.cs); 
getElementPrefix(SFAIC.common.contentPages.cp); 

यहाँ समस्या यह है कि यह हमेशा अनिर्धारित दिखाता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि यह ऑब्जेक्ट के वास्तविक मूल्य में गुजर रहा है, न कि संपत्ति। @ ic3b3rg की टिप्पणियों में वर्णित तकनीक का उपयोग करके इसे ठीक करने के लिए मैं क्या करूँगा?

+2

+1 अच्छा प्रश्न। मैंने यह खुद को सोचा है, और जब मुझे पता है कि यह सिर्फ लौटने के लिए काम करता है, मुझे नहीं पता कि यह सबसे अच्छा अभ्यास है या नहीं। यह देखने के लिए उत्सुक है कि समुदाय क्या सोचता है। – Eli

उत्तर

162

एक ब्रेक आपको फ़ंक्शन में प्रसंस्करण जारी रखने की अनुमति देगा। बस स्विच से बाहर लौटना ठीक है अगर आप फ़ंक्शन में ऐसा करना चाहते हैं।

+3

तो, मेरे प्रश्न में उदाहरण दिया गया है, जवाब हाँ है। लेकिन, अगर आपके पास कोई ऐसा कार्य है जहां आपको जारी रखने की आवश्यकता है, तो जाहिर है कि एक ब्रेक होगा जिसका आप उपयोग करेंगे। –

+8

@ मार्क कॉस्टेलो के जवाब ने मुझे आपके प्रश्न के बारे में कुछ और धन्यवाद दिया। मुझे लगता है कि आप एक सामान्य "सर्वोत्तम अभ्यास" दिशानिर्देश की तलाश में हैं, लेकिन आपके द्वारा दिए गए विशिष्ट उदाहरण में, सर्वोत्तम अभ्यास 'वापसी {1: "एक", 2: "दो, 3:" तीन "} [opt] ; 'यदि आपको डिफ़ॉल्ट की आवश्यकता है तो यह' var o = {1: "one", 2: "दो, 3:" तीन "} होगा; वापसी ओ ओ [ओ] ["]; ' – ic3b3rg

+0

@ ic3b3rg - मैंने अपने प्रश्न को' रिटर्न (ओ ऑप्ट में ऑप्ट) की तकनीक का उपयोग करने की कोशिश कर अपने विशिष्ट उदाहरण के साथ संपादित किया है? ओ [ऑप्ट]: ""; ", लेकिन यह हमेशा मेरे विशिष्ट मामले में डिफ़ॉल्ट देता है। –

6

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

हालांकि, यह देखते हुए कि यह निम्न करने के लिए सबसे अच्छा अभ्यास है अगर/किसी और बयानों के भीतर:

var foo = "bar"; 

if(foo == "bar") { 
    return 0; 
} 
else { 
    return 100; 
} 

इस के आधार पर, तर्क यह है कि विकल्प एक बेहतर अभ्यास है बनाया जा सकता है।

संक्षेप में, कोई स्पष्ट उत्तर नहीं है, इसलिए जब तक आपका कोड एक सतत, पठनीय, रखरखाव योग्य मानक का पालन करता है - यह कहना है कि अपने आवेदन के दौरान एक और दो विकल्पों को मिश्रण और मिलान न करें, यह सर्वोत्तम है अभ्यास आप का पालन करना चाहिए।

+2

उस उदाहरण में सबसे अच्छा अभ्यास 'वापसी foo == "bar' है; ' – ic3b3rg

+9

अगर मैं आपको परेशान कर रहा हूं तो मैं क्षमा चाहता हूं लेकिन उस स्थिति में मैं अभी भी सरल बनाउंगा:' वापसी foo ==" bar "? 0: 100; 'या यहां तक ​​कि 'वापसी [100,0] [foo ==" bar "];'। – ic3b3rg

+3

@ ic3b3rg - यह नहीं होना चाहिए: 'वापसी [100,0] [+ (foo ==" bar ")];' ? – Queue

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