2009-03-27 21 views
5
Switch(some case) { 
    case 1: 
      // compute something ... 
      return something; 
      break; 
    case 2: 
      // compute something ... 
      return something; 
      break; 

/* some more cases ... */ 

    case X: 
      // compute something ... 
      return something; 
      break; 
    default: 
      // do something 
      return something; 
      break; 
} 

मेरी राय में:क्या यह स्विच कथन खराब गंध करता है?

इस स्विच का बयान मान लिया जाये कि न्यायोचित, वापसी है और सिर्फ does not सही या सही लग रहा है टूट गया।

ब्रेक स्पष्ट रूप से अनावश्यक है, लेकिन खराब शैली को खत्म कर रहा है (या यह खराब शैली शुरू हो रही है?)?


मैं व्यक्तिगत रूप से ऐसा नहीं करता हूं, लेकिन काम में कोडबेस में से कुछ हैं। और नहीं, मैं आत्म-धार्मिक नहीं होने और कोडबेस को सही करने वाला नहीं हूं।

+0

LOLLLL @ "कोड-गंध" टैग! – Poni

उत्तर

11

सी # कंपाइलर चेतावनी देता है अगर आप यह कह रहे हैं कि ब्रेक पहुंच योग्य कोड है। तो मेरी किताब में यह वापसी और ब्रेक दोनों के लिए खराब रूप है।

+0

व्याख्या की गई भाषाओं का उपयोग करने वाले लोगों के लिए विचार के लिए महान भोजन –

5

मेरी राय में, मैं 'ब्रेक' कीवर्ड छोड़ दूंगा। मैं व्यक्तिगत रूप से सोचता हूं कि यह लोगों को याद दिलाने में मदद करता है कि 'निष्पादन समाप्त हो गया है! यहां देखने के लिए और कुछ नहीं! '। - शामिल किए जाने गरीब शैली है

switch(some case) { 
    case 1: 
      // compute something ... 
      break; 
    case 2: 
      // compute something ... 
      break; 
/* some more cases ... */ 
    case X: 
      // compute something ... 
      break; 
    default: 
      // do something 
      break; 
} 
return something; 
5

मैं एक छोटा सा परिवर्तन करना होगा। वे पहुंचने योग्य बयान हैं। उनसे छुटकारा पाएं।

मुझे यह तथ्य पसंद है कि स्थानीय चर सेट करने के बजाय मामले सीधे वापस आते हैं और फिर नीचे नीचे लौटते हैं - इसका मतलब यह है कि जब आप कोड पढ़ रहे हैं तो यह अविश्वसनीय रूप से स्पष्ट है कि को वापस लौटने की आवश्यकता है, और बस यही।

पहली जगह में स्विच करने के मामले में

साइड-ध्यान दें:

के लिए कि क्या एक स्विच बयान का इस्तेमाल यहाँ करने के लिए सही बात है, यह वास्तव में अन्य बातों पर निर्भर करता है। क्या इसके बजाय पॉलीमोर्फिक प्रकार का उपयोग करना समझ में आता है? यदि आप जावा में हैं, तो क्या आप एक स्मार्ट एनम का उपयोग कर सकते हैं? (आप इन्हें सी # में नकल कर सकते हैं, लेकिन उतना ही समर्थन नहीं है।)

मैं कहूंगा कि कम से कम विभिन्न डिज़ाइनों पर विचार करना चाहिए - लेकिन यह वही करने का सबसे आसान तरीका हो सकता है जो आप चाहते हैं ।

+3

मैं इसके खिलाफ सलाह दूंगा क्योंकि इसका मतलब यह है कि आपको यह देखने के लिए पूरे केस स्टेटमेंट को पढ़ने की जरूरत है कि 'कुछ' चर के साथ कुछ और होता है या नहीं। यदि आप अभी वापस आते हैं, तो यह तुरंत स्पष्ट हो जाता है कि, नहीं, कुछ भी नहीं करता है :-) – MPritchard

+0

चूंकि आपके पास प्रत्येक मामले के अंत में एक ब्रेक स्टेटमेंट है, और कुछ भी इसे बदल नहीं सकता है। हालांकि, कुछ अन्य उत्तरों को पढ़ने के बाद, मैं इस बात से सहमत हूं कि वैकल्पिक ब्रेक के साथ प्रत्येक ब्रेक को प्रतिस्थापित करना होगा। – Elie

+0

एली - मैं देखता हूं कि आप कहां से आ रहे हैं, मैं इसे टेक्स्ट बुक उत्तर –

21

नहीं, चूक गरीब शैली नहीं है:

+0

पढ़ने के लिए आसान मानता हूं हर मामले में एक रिटर्न स्टेटमेंट डालना ठीक है जब तक कि आप लौटने से पहले 'कुछ' करने के लिए एक और चीज करने का फैसला नहीं करते हैं। कहें, उदाहरण के लिए, कि आप कुछ लॉगिंग करना चाहते हैं। अब आपके दिनचर्या के नीचे एक केंद्रीय स्थान की जगह, आपको सभी मामलों पर फिर से विचार करना होगा और शायद पीछे हटना होगा। हर किसी की तरह मैं हमेशा "वापसी का एक बिंदु" दिशानिर्देश का पालन नहीं करता हूं, लेकिन इसके कारण हैं और इसके लिए कई केस स्विच उदाहरण मांगते हैं। –

+0

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

0

कोड गंध एक डिजाइन समस्या का तात्पर्य है। यह सिर्फ प्रारूपण का मुद्दा है। मुझे लगता है कि ज्यादातर लोग इस बात से सहमत होंगे कि छोड़े गए ब्रेक वाले संस्करण बेहतर हैं।

0

ब्रेक अनावश्यक है।

अंगूठे का कुछ नियम, केवल एक ही स्थान पर फ़ंक्शन से बाहर निकलना हमेशा अच्छा होता है, लेकिन चूंकि इस नियम को बनाया गया था, कोशिश-कैच का आविष्कार किया गया था (ओप गोटो)।

यदि आप अपने पूरे एप्लिकेशन में एक ही शैली रखते हैं, तो मुझे लगता है कि आप स्विच में वापसी के साथ रह सकते हैं।

1

मैं आप इस मैं की तरह वास्तव में हार्ड-कोड numers कर रहे हैं नहीं यकीन है कि कैसे शाब्दिक कि कोड तो इन टिप्पणियों के कुछ लागू न हो बनना है "मामले 1" हूँ ...

लगता है कि यह खराब शैली है और आपको एक गणना का उपयोग करना चाहिए।

यदि आप बस कुछ वापस कर रहे हैं और मामलों के उप-समूह में कोई अतिरिक्त तर्क नहीं है, तो आप एक "सरणी" को किसी सरणी या शब्दकोश में डालने पर विचार कर सकते हैं और स्विच स्टेटमेंट का उपयोग करने के बजाय उन्हें अपने इंडेक्स द्वारा संबोधित कर सकते हैं। ..

वापसी somethings [सूचकांक]

0

कोड यहाँ गंध मामले बयान में हार्ड कोडित मूल्यों है।

रिटर्न के लिए यह स्वाद और अच्छे फैसले का सवाल है। निश्चित रूप से यदि आपका केस मल्टीपल पेजों को फैलाता है तो वापसी के मामले में पढ़ना आसान होता है, लेकिन फिर समस्या शुरू करने के लिए एक बड़ा स्विच है।

Personnaly मैं एकल रिटर्न विकल्प पसंद करता हूं क्योंकि अगर आपको कुछ और प्रोसेसिंग जोड़ने की ज़रूरत है तो सभी मामलों का दौरा करने से पहले रिएक्टर के लिए सस्ता है। इसके अलावा, अगर किसी और को रिफैक्टर करने के लिए दिया जाता है तो उनके पास हर मामले में कोड पेस्ट करने की प्रलोभन नहीं होगी, कम से कम मुझे उम्मीद है ... अगर वे बेहतर करते हैं तो उम्मीद है कि मैं उनकी कोड समीक्षा नहीं कर रहा हूं (के लिए स्पष्ट रूप से कॉपी पेस्ट)।

+1

क्या आप हार्ड कोड किए गए मानों के बारे में मजाक कर रहे थे? क्या आप नहीं देख सकते कि मैं छद्म कोड का उपयोग कर रहा था? –

+0

हाँ मैं देख सकता हूं कि आप छद्म कोड का उपयोग कर रहे हैं, और मैं यह भी देखता हूं कि केस मान स्थिरांक नहीं हैं लेकिन संख्याएं हैं। मैं बस इतना कह रहा हूं कि मूल्यों की संख्या खराब होती है और आम तौर पर ध्यान देने की आवश्यकता होती है। – Newtopian

+0

वापसी ...टूटना; कोड गंध नहीं है यह सिर्फ एक स्वरूपण मुद्दा है, जिस भी तरह से आप इसे फिसलते हैं, यह कभी भी त्रुटि का कारण नहीं बनता है। इस प्रकार, मैं कह रहा था, अगर यहां एक कोड गंध है तो इसे संख्याओं के रूप में होना चाहिए क्योंकि बाकी के लिए यह कोड गंध के रूप में योग्य नहीं है, आईएमएचओ है। – Newtopian

0

स्विच स्टेटमेंट स्वयं कोड गंध हैं।

क्या l99057j की लाइनों के साथ कहा गया है, यदि आप जो भी कर रहे हैं, वह निरंतर मानों के लिए इनपुट मैप कर रहा है, तो यह उपयुक्त लुकअप संरचना के लिए एक जगह है, जैसे अनुक्रमिक इनपुट के लिए सरणी/सूची या एक शब्दकोश/मानचित्र एक स्पैस एक, एक स्विच स्टेटमेंट नहीं। यदि आप कुछ की गणना कर रहे हैं, तो मूल्य एक प्रतिनिधि होगा जिसे आप इनपुट के साथ बुलाते हैं।

0

अन्य ने अन्य पहलुओं पर टिप्पणी की है। रिटर्न के बाद अनावश्यक ब्रेक के लिए: मैं उन्हें एक ही कथन के साथ {} के रूप में एक ही कथन के साथ रखता हूं, यदि शरीर: यह प्रत्येक प्रोग्रामर के लिए दूसरी प्रकृति होनी चाहिए ताकि वहां उन ब्रेक लगाए जाएं। एक अनजाने में लापता होने की तुलना में बेहतर 100 ऐसे अनावश्यक ब्रेक हैं।

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