2013-08-23 13 views
16

तोड़ने बस जिज्ञासा से बाहर, मैं अक्सर इस तरह की स्थितियों देखें:स्विच मामले और

switch(something) { 
    case 'alice': 
     return something; 
    break; 
} 

कहाँ break पूरी तरह से अनावश्यक प्रतीत हो रहा है, वहाँ किसी भी कारण से यह वहाँ वैसे भी होने के लिए है?

+0

यह _probably_ सिर्फ त्रुटियों को प्रतिलिपि करने/चिपकाने से परिणाम होगा और/या haphhazardly भविष्य में उस कोड को संशोधित करने के खिलाफ रोकने के लिए है:

यह एक विकल्प के लेखन शैली है कि कुछ लोगों का तर्क हो सकता है एक बेहतर अभ्यास है । मुझे एक अच्छी सुरक्षा नेट की तरह लग रहा है। – jahroy

+2

इंडेंटेशन को देखते हुए, यह केवल स्टाइलिस्ट विकल्प हो सकता है - सुझाए गए [ब्लॉक] के अंत के रूप में 'ब्रेक' का उपयोग करके (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/वक्तव्य/ब्लॉक)। लेकिन, 'ब्रेक' 'वापसी' कथन के बाद पहुंच योग्य कोड है। तो, यह कुछ भी नहीं करेगा; लेकिन यह किसी भी चीज़ को चोट नहीं पहुंचाएगा। –

उत्तर

17

break; कथन return कथन पेश करने से पहले वहां हो सकता था। इस प्रकार, यह अनावश्यक हो गया है और इसे हटाया जा सकता है।

वास्तव में, जब आप jslint के माध्यम से है कि कोड चलाने के लिए, यह इस त्रुटि दिखाएगा:

Unreachable 'break' after 'return'.

किया जाए या नहीं इस सलाह पर ध्यान करने के लिए आप पर निर्भर; यदि आप किसी विशेष शैली पर बसने से पहले कुछ चीजों को आजमा रहे हैं तो विकास के दौरान यह सहायक हो सकता है।

var retval = null; 
switch (something) { 
    case 'alice': 
     retval = something; 
     break; 
    // ... 
} 
return retval; 
+1

तो कुछ लोग (jslint) वास्तव में संकेत –

+0

@RienNeVaPlus वेल के लिए एक * त्रुटि * +1 पर विचार करते हैं, इसी तरह क्रॉकफोर्ड इन चीजों के बारे में स्पष्ट रूप से महसूस करता है :) –

-3

मामले वास्तव में बहुत आवश्यक

आप एक मामला है, तो आप उस मामले से तोड़ने के लिए या फिर अन्य मामलों के साथ-साथ उठाया जाता है की जरूरत है।

मामलों का उपयोग अक्सर खराब अभ्यास माना जाता है, जितना संभव हो सके उससे दूर रहें।

switch(casein){ 
case 1:{ 
break; 
} 
case 2:{ 
break 
} 
} 
+1

ठीक है, एक बार 'रिटर्न' कहा जाता है, फ़ंक्शन को – Plato

+0

निष्पादित करना बंद कर देता है क्या आप समझा सकते हैं कि क्यों * मामलों का उपयोग अक्सर खराब अभ्यास माना जाता है *? इसके अलावा, आपके मामलों में '{}' क्यों? –

+0

@ user2701974 मुझे लगता है कि आपने इस सवाल को गलत समझा होगा। यह 'वापसी' के बाद 'ब्रेक' के उपयोग के बारे में पूछ रहा है। 'स्विच..केस' सिर्फ संदर्भ के लिए है। साथ ही, 'स्विच' ब्लॉक को सार्वभौमिक रूप से खराब प्रथाओं के रूप में नहीं माना जाता है; वे अक्सर विकल्पों पर वरीयता में नहीं हैं। –

4

break जावास्क्रिप्ट बताता switch ब्लॉक में मामलों के मूल्यांकन को रोकने के लिए। कोड निष्पादन switch ब्रैकेट बंद होने से पहले जारी है। उदाहरण कोड में return कथन वास्तव में case कथन और switch ब्लॉक के बाद कुछ भी शामिल करने से पहले कुछ भी आगे रोक देगा।

मैंने आदत से हर मामले में break स्टेटमेंट लगाया। अगर मैं एक break बिना एक मामले में लिखा था तो मैं भविष्य है और एक break बयान के अभाव में चारों ओर कॉपी कर सकते हैं और पेस्ट कोड के ब्लॉक तो जैसे एक बग बन जाएगा:

function whereLivesA(species){ 
    switch(species){ 
    case 'worms': 
     // Relying on return to prevent further code execution within the switch 
     // block works but is ~bad~ smelly (according to plato :D) 
     var habitat = 'dirt' 
     return (species + ' live in ' + habitat); 
    case 'bees': 
     var habitat = 'hive'; 
     break; 
    } 
    // Stuff to do after the switch statement (unless you returned already) 
    var str = species+' live in '+habitat; 
    return str; 
} 
console.log('whereLivesA'); 
console.log(whereLivesA("worms")); 
console.log(whereLivesA("bees")); 
    /* Output: 
    whereLivesA 
    worms live in dirt 
    bees live in hive 
    */ 


function whereLivesB(species){ 
    switch(species){ 
    case "worms": 
     // what if future code changes remove `return` and don't add `break`? 
     // return (species + ' live in ' + habitat) 
     var habitat = 'dirt'; 
     // break; 
    case "bees": 
     var habitat = 'hive' 
     break; 
    } 
    // Stuff to do after the switch statement (unless you returned already) 
    var str = species+' live in '+habitat; 
    return str; 
} 
console.log('whereLivesB'); 
console.log(whereLivesB("bees")); 
console.log(whereLivesB("worms")); 
    /* Output: 
    whereLivesB 
    bees live in hive 
    worms live in hive 
    */ 


function whereLivesCorrect(species){ 
    switch(species){ 
    case "worms": 
     var habitat = 'dirt'; 
     break; 
    case "bees": 
     var habitat = 'hive' 
     break; 
    } 
    // Stuff to do after the switch statement (unless you returned already) 
    var str = species+' live in '+habitat; 
    return str; 
} 

console.log('whereLivesCorrect'); 
console.log(whereLivesCorrect("bees")); 
console.log(whereLivesCorrect("worms")); 
    /* Output: 
    whereLivesCorrect 
    bees live in hive 
    worms live in dirt 
    */ 

जे एस newbies: यदि आप ऐसा नहीं करते हैं इसे फ़ाइल में सहेजना और node filename चलाएं, आप इसे चलाने के लिए F12 दबा सकते हैं और इस स्क्रिप्ट या अन्य स्वयं निहित स्क्रिप्ट को अपने ब्राउज़र के कंसोल में पेस्ट कर सकते हैं।

यदि आप node.js का उपयोग करते हैं तो आप node को कमांड लाइन पर node कंसोल शुरू करने और इसे पेस्ट करने के लिए भी टाइप कर सकते हैं।

0

break कीवर्ड का उपयोग कथन को समाप्त करने के लिए किया जाता है, या लूप से बाहर निकलने के लिए किया जाता है, इसलिए यह चलना जारी नहीं रहता है।

उदाहरण के लिए

:

एचटीएमएल

what's your age?: <input type="text" id="ageOf"><br> 
<input type="submit" onSubmit="postReply();"> 
<div id="reply"></div> 

js

var userResponse = document.getElementById('ageOf'); 
var response = document.getElementById('reply'); 

function postReply() { 
    switch(ageOf) { 

    case 1: ageOf<18 { 
     response.innerHTML = "You are still young."; 
     break; 
    } 

    case 2: ageOf>18 && ageOf<45 { 
     response.innerHTML = "You are getting up there..."; 
     break; 
    } 

    case 3: ageOf >= 45 { 
     response.innerHTML = "You are over the hill!"; 
     break; 
    } 
} 

तो प्रस्तुत करने पर, प्रपत्र, function postReply() फोन उपयोगकर्ता जवाब की जाँच करें और मूल्य के आधार पर, यह चाहिए उन बयानों में से एक लौटें।

+1

क्या वे मामले केस लेबल के बाद वास्तव में वैध वाक्यविन्यास हैं? 'उम्र ओएफ <18' मेरे लिए संदिग्ध लग रहा है। इसके अलावा, ओपी का सवाल वास्तव में सिर्फ 'रिटर्न' कथन के बाद 'ब्रेक' कथन का उपयोग क्यों करेगा। – jahroy

+0

मैंने सिंटैक्स को गड़बड़ कर दिया होगा, लेकिन मैं एक उदाहरण प्रदान करने की कोशिश कर रहा था ताकि यह और अधिक स्पष्ट हो। – matt6frey

+0

ए) मामलों को घुंघराले ब्रैकेट में संलग्न नहीं किया गया है बी) आपको अक्षर 'केस' में पास करना होगा। जैसे 'केस 1 की बजाय: आयुऑफ <18 {} 'आप' var s = 'young' करेंगे; अगर (उम्र> 18) {s = 'मध्यम'}; अगर (आयु> 45) {s = पुराना '}' और फिर 'स्विच (ओं) {केस' युवा ': ...; टूटना; केस 'मध्यम' ...} ' – Plato

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