में नेस्टेड अनुभाग चलती इसे अपने कोड कठिन पढ़ने के लिए बनाता है के द्वारा अपने कोड में सुधार, तो यह बुरा है अभ्यास।
चाहे आपके विशेष उदाहरण में यह मामला तय करने के लिए है, लेकिन आम तौर पर मैं कहूंगा कि यह शायद मामला होगा।
आप विकल्प के लिए कहा ...
एक उप-समारोह में अपने कोड के कुछ निकालें। उदाहरण के लिए:
case 'foo' :
myVar = 'blah';
break;
case 'bar' :
myVar = secondLevelFunction();
break;
यहाँ, secondLevelFunction()
अतिरिक्त switch()
बयान जहां प्रत्येक case
myVar
के लिए एक मान देता है शामिल हैं।
सरणी मैपिंग का उपयोग करें।उदाहरण के लिए:
var mapper = {'foo':'blah', 'bar':'bibble', etc};
//now, instead of a big switch(input) { .... } block that sets myVar
//for each option, you can just set it directly in a single line, like so:
var myVar = mapper[input];
इसके अलावा, आप कोड की गुणवत्ता के ठोस कदम के लिए देख रहे हैं, तो आप Cyclomatic Complexity के बारे में सीखना चाहिए। यह एक उपाय है कि एक समारोह कितना जटिल है। इस समारोह को देखकर माप लिया जाता है कि फ़ंक्शन के कितने "निर्णय बिंदु" हैं। प्रत्येक case
, if
, लूप, आदि एक "निर्णय बिंदु" है। आपके पास जितना अधिक होगा, उतना ही जटिल होगा।
साइक्लोमैटिक कॉम्प्लेक्सिटी कोड कोड और अच्छी कोडिंग प्रथाओं से पूरी तरह से जुड़ा हुआ है, इसलिए यदि आपके फ़ंक्शन में उच्च सीसी स्कोर है (जो शायद यह करेगा यदि उसके पास एकाधिक नेस्टेड switch
ब्लॉक हैं), तो यह खराब कोड गुणवत्ता का संकेत है । ऊपर वर्णित वैकल्पिक समाधान दोनों ही इससे मदद कर सकते हैं। सीसी पर और पढ़ने के लिए मैं इसे आपको छोड़ दूंगा।
स्पष्ट रूप से वैकल्पिक समाधानों को आपकी आवश्यकताओं के अनुरूप अनुकूलित करने की आवश्यकता होगी, लेकिन उम्मीद है कि वे आपको कुछ विचार देंगे।
मैं ऐसे मामलों को देख सकता हूं जहां यह ठीक है। लेकिन मैं इसे बहुत लंबे समय तक देखता हूं और देखता हूं कि मुझे एक सरल तकनीक मिल सकती है या नहीं। –
वास्तव में एक डुप्ली नहीं है, लेकिन इसमें प्रासंगिक/रोचक जानकारी है: http://stackoverflow.com/questions/7807970/nesting-switch-cases-in-javascript-any-speed-advantage – Joum
प्रासंगिक उत्तरों प्राप्त करने के लिए यह बेहतर होगा प्रश्न में अपना कोड जोड़ें ... –