2012-09-02 15 views
9

ऐसे मामलों में जहां मैं कहीं भी उपयोग करने से पहले एक फ़ंक्शन लिख रहा हूं, मुझे इसके पैरामीटर में टाइप एनोटेशन जोड़ने के लिए उपयोगी लगता है। इसका मतलब है कि मैं अपने मूल्यों पर स्वत: पूर्ण कर सकता हूं और (विशेष रूप से एक एफ # नौसिखिया) अप्रत्याशित प्रकार अनुमान से भ्रमित नहीं होगा।refactoring करते समय एफ # प्रकार एनोटेशन हटा दिया जाना चाहिए?

हालांकि, एक बार फ़ंक्शन समाप्त होने के बाद, मैं पैरामीटर के प्रकार एनोटेशन को हटाने का लुत्फ उठाता हूं क्योंकि वे बदसूरत हैं। क्या यह एक उचित चीज की तरह लगता है?

मुझे उम्मीद है कि यह इस बात पर निर्भर हो सकता है कि मैं किस प्रकार के कार्य के बारे में बात कर रहा हूं। उदाहरण के लिए यह एक निजी समारोह के लिए समझ में आता है, लेकिन सार्वजनिक के लिए नहीं।

उत्तर

6

मुझे लगता है कि यह कई कारकों पर निर्भर करता है। एनोटेशन छोड़ने के पक्ष में कुछ तर्क दिए गए हैं:

  1. एनोटेशन टाइप करें तर्कसंगत रूप से कंपाइलर-चेक किए गए दस्तावेज़ों के रूप में कार्य कर सकते हैं।
  2. अच्छे कारण के बिना कामकाजी कोड को संशोधित न करें।
  3. संकलन के लिए कुछ प्रकार की टिप्पणियां आवश्यक हो सकती हैं, इस मामले में शायद इन सभी को छोड़कर केवल अनावश्यक लोगों को स्थिरता के लिए छोड़ने के बजाय समझ में आता है।

हालांकि, दूसरे हाथ पर, वहाँ भी कुछ बाध्यकारी कारण उन्हें हटाने के लिए कर रहे हैं:

  1. संकलक वास्तव में अधिक सामान्य प्रकार, जिस स्थिति में आप का एक व्यापक सेट में कार्यों का पुन: उपयोग कर सकते हैं यह निष्कर्ष निकाल सकते संदर्भों।
  2. आपका कोड अधिक संक्षिप्त होगा, जो आपको अधिक पढ़ने योग्य लगता है।
2

नहीं। इसका कोई फायदा नहीं है। आप कह सकते हैं कि यह प्रोग्राम को बाद में बदलना आसान बनाता है, या यह बेहतर दिखता है, लेकिन व्यवहार में यह कभी काम नहीं करता है।

अधिकतर संभावना है कि आप वैसे भी एनोटेशन को फिर से टाइप करना समाप्त कर देंगे, ठीक उसी कारण से आपने उन्हें पहले स्थान पर जोड़ा था।

0

यह व्यक्तिगत शैली का मामला है; मैं उन्हें बाहर ले जाऊंगा। जैसे ही आप एफ # कोडिंग में बेहतर हो जाते हैं, आपको लगता है कि आपको कम से कम एनोटेशन चरण से गुजरना होगा।

4

क्या इसके लायक है के लिए, मेरे व्यक्तिगत शैली (जब तक वे के लिए आवश्यक हैं बाएँ से सही प्रकार निष्कर्ष) FSI फ़ाइलों का उपयोग कर सार्वजनिक मॉड्यूल इंटरफेस की एनोटेशन को बनाए रखने, और FS मॉड्यूल कार्यान्वयन फ़ाइलों के भीतर सबसे एनोटेशन को मिटाने के लिए है। इस योजना के साथ मॉड्यूल इंटरफ़ेस को बदलने और इसके कार्यान्वयन को बदलने के लिए एक कम सौदा है।

2

मुझे लगता है कि यहां एक महत्वपूर्ण तर्क यह है कि प्रकार एनोटेशन को हटाने से स्रोतों का अर्थ बदल जाता है।

दरअसल, मान लीजिए कि एक स्रोत कोड है: let f (arg: MyType) = arg.ToString()
स्रोत को MyType टाइप करने के लिए प्रतिबंधित करता है। यदि कोई क्लाइंट कोड किसी अन्य प्रकार के तर्क को पारित करने का प्रयास करता है, तो यह संकलित नहीं होगा।
यह यूनिट टेस्ट पर भी लागू होता है। टाइप एनोटेशन के साथ, यह देखना आसान है कि सभी यूनिट टेस्ट f पर केवल MyType के तर्क के साथ कॉल करते हैं।

प्रकार एनोटेशन निकाल दिए जाते हैं, प्रकार निष्कर्ष काम अप्रतिबंधित है, लेकिन परीक्षण के लिए तैयार नहीं हैं, तो वे अभी भी केवल यह MyType साथ परीक्षण

इसलिए, प्रकार एनोटेशन को हटाने के लिए यूनिट टेस्ट को बदलने के साथ ही किसी भी अन्य रिफैक्टरिंग को बदलने के साथ जोड़ा जाना चाहिए। यदि आप परीक्षण सुधारने के लिए तैयार हैं, तो इसके लिए जाएं। अन्यथा आप परेशानी के लिए पूछ सकते हैं, खासकर एक बड़े कोडेबेस के लिए।

+0

यह वास्तव में एक दिलचस्प बात है, मैंने इसे टीडीडी परिप्रेक्ष्य से नहीं सोचा था। पहले परीक्षण परीक्षण का अर्थ यह होगा कि जब मैं केवल खुद की मदद करना चाहता हूं तो मुझे एनोटेट करने की आवश्यकता नहीं होगी। – Geoff

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

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