2013-08-07 5 views
5

हर बार जब मैं एक विधि को देखने के थे मानकों में से एक एक output parameterखराब अभ्यास माना जाता है आउटपुट पैरामीटर का उपयोग कर रहा है?

तरह
void addTokenErrorsToReport(List<String> tokens, Map<String, Integer> report) 

मैं लग रहा है कि यह सिर्फ सादा गलत है प्राप्त है। मेरे दृष्टिकोण से, सामान्य रूप से पैरामीटर अपरिवर्तनीय होना चाहिए, और किसी विधि के भीतर नहीं बदला जाना चाहिए। जैसे, उपरोक्त विधि

Map<String, Integer> createTokenErrorsReport(List<String tokens) 

लौटे फिर से लिखा जा सकता है Map तो मूल रिपोर्ट मानचित्र के साथ विलय हो सकता है।

क्या यह धारणा सही है? या दोनों संस्करण समान रूप से स्वीकार्य हैं?

+4

प्रश्न जो प्राथमिक रूप से राय आधारित हैं SO के लिए उपयुक्त नहीं हैं। –

उत्तर

5

अधिकांश चीजों के साथ, यह केवल "खराब अभ्यास" है यदि यह खराब कामकाजी/अपठनीय/हार्ड-टू-रखरखाव कोड की ओर जाता है या यदि आपको नहीं पता कि आप इसे क्यों कर रहे हैं।

अधिकांश मामलों में आउटपुट पैरामीटर का उपयोग करने से उन प्रभाव नहीं होते हैं।

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

यदि आप createTokenErrorsReport दृष्टिकोण लेना चाहते थे, तो आपको मौजूदा रिपोर्ट में नए टोकन डालने से प्रत्येक कॉल का पालन करना होगा। यदि मौजूदा रिपोर्ट में टोकन जोड़ना एक आम ऑपरेशन है, तो यह निश्चित रूप से एक विधि है जो जोड़ता है। यह कहना नहीं है कि createTokenErrorsReport भी मौजूद नहीं होना चाहिए - यदि टोकन सूची से नई रिपोर्ट बनाना एक आम ऑपरेशन है, तो आप ऐसा फ़ंक्शन चाहते हैं जो ऐसा करता है।

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

बस नौकरी के लिए सबसे अच्छा टूल का उपयोग करें और अपना कोड संक्षिप्त रखें।

0

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप कहां से आते हैं (भाषा)। यदि आप सी या सी ++ लिखते थे, जहां आप पॉइंटर्स को पैरामीटर के रूप में उपयोग कर सकते थे, जो कि अच्छा और व्यावहारिक है, तो आप आसानी से अपने पहले उदाहरण की तरह कोड लिख सकते हैं। मुझे सच में नहीं लगता कि कुछ प्रकार का अच्छा या बुरा है, लेकिन कोडिंग की आपकी शैली कैसा है।

0

मैंने इस कोडिंग अभ्यास को अक्सर देखा है और इसे काफी सुरुचिपूर्ण पाया है। यह आपको कई ऑब्जेक्ट्स को 'वापस' करने की अनुमति देता है।

उदाहरण के लिए, आपके उपर्युक्त उदाहरण में, आप एक त्रुटि कोड से संबंधित एक पूर्णांक मान वापस कर सकते हैं।

2

दूसरे उदाहरण में आप मानचित्र में कुछ कैसे जोड़ देंगे? मुझे लगता है कि अगर आपको addTokenErrorsToReport में भरने वाले खाली मानचित्र को पास करना है तो यह बुरा व्यवहार होगा। लेकिन इस मामले में: नहीं, मुझे नहीं लगता कि यह बुरा अभ्यास है। यदि आप कई List<String> tokens हैं जिन्हें आप संसाधित करना चाहते हैं तो आप अन्यथा कैसे कार्यान्वित करेंगे? मुझे लगता है कि पहला उदाहरण सीधा है।

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

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