2012-05-09 31 views
5

में अंतिम बयान होना चाहिए कभी-कभी मुझे पता चला कि कुछ पीएमडी नियम एक दूसरे के साथ संघर्ष करते हैं, इसलिए आप ऐसे कोड नहीं लिख सकते हैं जो सभी पीएमडी नियमों को पूरा करते हैं ।पीएमडी नियमों का उल्लंघन करता है: एक विधि में केवल एक निकास बिंदु होना चाहिए, और यह विधि

उदाहरण के लिए, ऐसा लगता है कि निम्नलिखित दो नियम एक-दूसरे के साथ बहिष्कृत हैं: "ऑब्जेक्ट को शून्य करने के लिए एक कोड गंध है। रिफैक्टरिंग पर विचार करें।" और "एक विधि केवल एक ही निकास बिंदु होना चाहिए, और उस विधि में पिछले बयान होना चाहिए"

निम्नलिखित मेरी उदाहरण कोड है:

enter image description here

अगर मैं get1 का उपयोग करें() , मैं पूर्व नियम का उल्लंघन करूंगा, और यदि मैं get2() का उपयोग करता हूं, तो मैं बाद के नियम का उल्लंघन करूंगा। मैं पसंद करता हूं कि एक विधि में केवल एक निकास बिंदु होना चाहिए, लेकिन मैं नहीं चाहता कि पीएमडी रिपोर्ट करता है कि "ऑब्जेक्ट को शून्य करने के लिए एक कोड गंध है", क्या किसी के पास कोई अच्छा विचार है? धन्यवाद एक बहुत :)

उत्तर

7

इन दोनों मामलों में, मैं सशर्त ऑपरेटर का उपयोग करेंगे:

return condition > 5 ? Integer.valueof(123) : null; 

व्यक्तिगत तौर पर मैं ऐसा हालांकि एक निकास बिंदु पर कायम करने की कोशिश मत। ऐसे कई बार हैं जब कोड कम पठनीय बनाता है - अक्सर आप विधि की शुरुआत में बता सकते हैं कि वापसी मूल्य क्या होना चाहिए (उदाहरण के लिए यह मूल मामला है) ... तो क्यों न सिर्फ वापस यह? कोड जो dogmatically "केवल एक निकास बिंदु" के लिए चिपक जाता है आम तौर पर अनावश्यक रूप से घोंसला कोड के साथ समाप्त होता है जो तब तक घुटने के लिए कठिन होता है।

+0

क्योंकि मैंने लंबे समय तक सी कोड लिखा है, मैं एक समारोह को एक निकास बिंदु देने देता था.अब आपके उत्तर से मैं सहमत हूं कि यह कोड को कम पठनीय बनाएगा। मैं नियम को अक्षम करने के लिए पीएमडी के विकल्प "केवलऑनरेटर्न" को बंद कर दूंगा। – soulmachine

+1

@ सोल्माचिन: ​​कचरा संग्रह और अपवादों का मिश्रण वास्तव में जो उचित है उसे पूरी तरह से बदलता है :) –

+0

बहुत बहुत धन्यवाद: डी – soulmachine

1

return (condition > 5) ? Integer.valueOf(123) : null; 

लेकिन मैं अगर है कि "कोड गंध" भी पता नहीं है का उपयोग करना ... :)

+0

पीएमडी रिपोर्ट "एक ऑब्जेक्ट को शून्य करने के लिए एक कोड गंध है। रिफैक्टरिंग पर विचार करें।" – soulmachine

+0

बेशक :) लेकिन यहां हमारे पास एक "वापसी" कथन है, असाइनमेंट नहीं;) जाहिर है, अगर आप 'ऑब्जेक्ट obj = get2()' जैसे कुछ करते हैं, तो वह "कोड गंध" होगा ... लेकिन यह नहीं है आपके प्रश्न का बिंदु। किसी भी मामले में, जॉन स्कीट ने आपको प्रतिक्रिया पूरी तरह से दी है, और उदाहरण बिल्कुल वही है। :) – javatutorial

+0

बहुत बहुत धन्यवाद: डी – soulmachine

1

बस पहली विधि (get1) के लिए किसी और को हटा दें। जावा ऑब्जेक्ट्स डिफ़ॉल्ट रूप से शून्य हैं, यह असाइनमेंट (परिणाम = शून्य) की आवश्यकता नहीं है।