एक विधि टिप्पणी में एक सारांश और वापसी विवरण दोनों शामिल होने चाहिए, जब वे अक्सर समान होते हैं?


10

मैं ठीक से प्रलेखित कोड का प्रस्तावक हूं, और मैं इसके संभावित डाउनसाइड्स से अच्छी तरह वाकिफ हूं । यह इस सवाल के दायरे से बाहर है।

मैं हर सार्वजनिक सदस्य के लिए XML टिप्पणियों को जोड़ने के नियम का पालन करना पसंद करता हूं , यह देखते हुए कि मुझे Visual Studio में IntelliSense कितना पसंद है।

हालांकि अतिरेक का एक रूप है, जो मेरे जैसे अत्यधिक टिप्पणी करने वाले से भी परेशान है। एक उदाहरण के रूप में List.Exists () लें

/// <summary>
///     Determines whether the List<T> contains elements
///     that match the conditions defined by the specified predicate.
/// </summary>
/// <returns>
///     true if the List<T> contains one or more elements that match the
///     conditions defined by the specified predicate; otherwise, false.
/// </returns>
public bool Exists( Predicate<T> match )
{
    ...
}

Summaryऔर returnsमूल रूप से एक ही बात कह रहे हैं। मैं अक्सर सारांश को एक returnsपरिप्रेक्ष्य से अधिक लिखना समाप्त करता हूं, returnsप्रलेखन को पूरी तरह से छोड़ देता हूं ।

जब सूची में ऐसे तत्व होते हैं जो निर्दिष्ट प्रेडिकेटेट द्वारा परिभाषित शर्तों से मेल खाते हैं, तो सही है, अन्यथा गलत है।

इसके अतिरिक्त, इंटेलीजेंसी में रिटर्न प्रलेखन नहीं दिखता है, इसलिए मैं तुरंत किसी भी प्रासंगिक जानकारी को लिखता हूं summary

  1. आपको कभी भी returnsअलग से दस्तावेज़ करने की आवश्यकता क्यों होगी summary?
  2. Microsoft ने इस मानक को क्यों अपनाया इस पर कोई जानकारी?

जवाबों:


3

आप एक दूसरे से अनुमान लगा सकते हैं, लेकिन वे दो खंड अलग-अलग बने रहते हैं, क्योंकि यह उस व्यक्ति पर ध्यान केंद्रित करने में मदद करता है जो कोड की समीक्षा / उपयोग करते समय व्यक्ति को दिलचस्पी लेता है

आपका उदाहरण लेते हुए, मैं लिखूंगा:

/// <summary>
/// Determines whether the List<T> contains elements that match the conditions
/// defined by the specified predicate.
/// </summary>
/// <returns>
/// A value indicating whether at least one element matched the predicate.
/// </returns>
public bool Exists(Predicate<T> match)
{
    ...
}
  • यदि मैं इस कोड की समीक्षा कर रहा हूं और मैं यह जानना चाहता हूं कि विधि क्या करती है, तो मैंने सारांश पढ़ा, और यही वह सब है जिसकी मुझे परवाह है।

  • अब, आइए कल्पना करें कि मैं आपके तरीके का उपयोग कर रहा हूं और मुझे प्राप्त होने वाला रिटर्न मान अजीब है, इनपुट दिया गया है। अब, मैं वास्तव में यह जानना नहीं चाहता कि विधि क्या करती है, लेकिन मैं वापसी मूल्य के बारे में कुछ और जानना चाहता हूं। यहाँ, <returns/>अनुभाग मदद करता है, और मुझे सारांश पढ़ने की आवश्यकता नहीं है।

फिर, इस उदाहरण में, आप सारांश से अनुमान लगा सकते हैं <returns/>, और सारांश से अपेक्षित वापसी मूल्य का अनुमान लगा सकते हैं । लेकिन उसी तर्क को चरम पर ले जाने के लिए , इस मामले में अपनी पद्धति को बिल्कुल भी दस्तावेज़ करने की आवश्यकता नहीं है : एकमात्र तर्क के रूप में List<T>, विधि का नाम, अंदर रखा गया है , Predicate<T> matchजो काफी स्पष्ट है।

याद रखें, सोर्स कोड एक बार लिखा जाता है लेकिन बहुत बार पढ़ा जाता है । यदि आप अपने कोड के आगे के पाठकों के लिए एक्साइज को कम कर सकते हैं, तो XML दस्तावेज़ में एक अतिरिक्त वाक्य लिखने में दस सेकंड खर्च करें, यह करें।


1
आप एक विधि को बुला रहे हैं और आप यह नहीं जानना चाहते कि यह क्या करता है !?
जे.के.

1
@jk: वह लगा रहा है कि उसने पहले से ही ऐसा किया है। असफल होने पर ही वह रिटर्न वैल्यू पर 'फोकस' करना चाहता है। अंतिम पैराग्राफ के लिए +1, अनिवार्य रूप से यह है कि मैं कैसा महसूस करता हूं। भले ही प्रलेखन मेरे उदाहरण के रूप में एक स्पष्ट तथ्य बताता है, यह उसकी उम्मीदों के पाठक को आश्वस्त करता है। जब टिप्पणियों को ठीक से प्रबंधित किया जाता है, तो यह कहता है: "इस पद्धति को ठीक से सोचा गया है, और जो यहां उल्लेख किया गया है, उससे अधिक कुछ नहीं करता है", जैसा कि एमएसडीएन प्रलेखन में है।
स्टीवन ज्यूरिस

2

मेरा उपयोग:
<summary>वर्णन करता है कि विधि क्या करती है (पाने के लिए <returns>)। वापसी मूल्य का
<returns> वर्णन करता है ।

MSDN के लिंक <summary>:।<returns>


लिंक के लिए धन्यवाद। लेकिन कहीं भी summaryराज्य के msdn प्रलेखन में यह वर्णित नहीं है कि 'विधि क्या करती है'। जब तक आप एमएसडीएन और राज्यों के बीच अंतर को स्पष्ट करने के लिए अपना जवाब अपडेट करने के लिए समय नहीं निकालते, तब तक मैं मतदान करता हूं जब तक आप इसे तैयार नहीं करते। ; पी
स्टीवन ज्यूरिस

2
MSDN इसके बारे में कुछ कहता है या नहीं, यह वास्तव में एक अच्छा दिशानिर्देश है। अपने उदाहरण में, आपको पूरे सारांश को दोहराने की ज़रूरत नहीं है, आप बस "रिटर्न trueका वर्णन कर सकते हैं यदि विधेय का मिलान किया गया था।" अगर किसी को यह जानने की जरूरत है कि एक मैच का गठन होता है, तो वे बाकी दस्तावेज पढ़ सकते हैं।
Blrfl

@ ब्लरफेल: मैं यह नहीं कह रहा कि गाइडलाइन गलत है। मैं कह रहा हूं कि किसी स्रोत का संदर्भ देना गलत है, किसी चीज को थोपना वहां लिखा जाता है जब वह नहीं होता है। इसलिए डाउन वोट। मैं इस उत्तर को संपादित देखना बहुत पसंद करूंगा।
स्टीवन ज्यूरिस

@StevenJeuris: MSDN प्रलेखन के लिंक केवल पूरक जानकारी थे। MSDN यह नहीं कहता है, "जब आपके पास ऐसा हो <summary>और <returns>ऐसा करें"। जैसा कि ब्ल्रफ ने कहा, यह सिर्फ एक दिशानिर्देश है जिसका कोई उपयोग करना चाहे या नहीं कर सकता है।
जेक बर्जर

1
@StevenJeuris: हालाँकि, जिस तरह से यह लिखा गया था, मैं देख सकता था कि कोई कैसे अनुमान लगा सकता है कि यह MSDN से आया है।
जेक बर्गर

1

आपको कभी भी सारांश से अलग रिटर्न की आवश्यकता क्यों होगी?

मुझे लगता है कि यदि सारांश भाग वास्तव में लंबा और वर्णनात्मक है, तो अंत में एक अलग, संक्षिप्त रिटर्न भाग होना उपयोगी हो सकता है।

मैं आमतौर पर <summary>अपने कोड में सिर्फ एक हिस्सा लिखता हूं, इससे आपको "रिटर्न _ " कहने का तरीका बिगड़ जाता है ।

मैंने किसी भी टिप्पणी में कहा कि एक कॉलर को पता होना चाहिए कि विधि नाम और मापदंडों (और उनके नाम) से स्पष्ट नहीं हैं। उम्मीद है कि हालांकि, विधि का नाम और पैरामीटर स्पष्ट रूप से पर्याप्त है कि टिप्पणी बहुत संक्षिप्त हो सकती है।


1

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

  • विधि प्रलेखन केवल यह बताता है कि बाहरी कॉलर्स को क्या जानना है। यह बात नहीं है कि यह कार्य आंतरिक रूप से कैसे किया जाता है, लेकिन इसमें क) उल्लेख किया गया है कि कॉलर इस पद्धति को क्यों कॉल करना चाहेगा, ख) विधि को कॉल करने के अपेक्षित परिणाम क्या होंगे। यदि विधि को कैसे काम करना है, यह दस्तावेज करने की आवश्यकता है, तो मैंने इसे कोड बॉडी में डाल दिया।
  • यदि किसी विधि में इसके लिए पर्याप्त जटिलता है, तो सामान्य विवरण और एक अलग [रिटर्न] अनुभाग उचित लगता है। आप नहीं चाहते कि पाठक पूरा विवरण पढ़ें और यह पता लगाने का प्रयास करें कि रिटर्न वैल्यू की व्याख्या कैसे करें।
  • यदि विधि इतनी सरल है कि यह वर्णन करने के लिए सबसे अच्छा तरीका यह है कि "यह विधि व्यक्ति के पते को लौटाती है" जैसा कुछ कहना है, तो मैं [रिटर्न] अनुभाग को छोड़ देता हूं क्योंकि जोड़ना DRY सिद्धांत के खिलाफ जाना प्रतीत होता है और मैं उस का एक बड़ा वकील। इस श्रेणी में बहुत सारे वन-लाइन एक्सेसर विधियाँ लगती हैं।

हाँ, मैं उल्लेख किए गए बिंदुओं के साथ जुड़ सकता हूं, और कम या ज्यादा उनका अनुसरण कर सकता हूं। समस्या यह है कि एक बहुत व्यक्तिपरक सम्मेलन है, यही कारण हो सकता है कि माइक्रोसॉफ्ट ने हमेशा returnsइसके बजाय हमेशा जोड़ने का विकल्प चुना । मैं यह भी नोटिस करता हूं कि वे हमेशा एक ही फॉर्मूलेशन का उपयोग करते हैं, जैसे "सच अगर ..., अन्यथा, झूठी " बूलियन रिटर्न वैल्यू के लिए। मुझे आश्चर्य है कि क्या उन्होंने इसके लिए एक सम्मेलन भी निर्दिष्ट किया है।
स्टीवन ज्यूरिस

0

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

यदि सूची में एक या एक से अधिक तत्व हैं जो निर्दिष्ट विधेय द्वारा परिभाषित शर्तों से मेल खाते हैं; अन्यथा, गलत है।

हो जाता है

सच है यदि सूची का कोई तत्व विधेय से मेल खाता है; अन्यथा झूठ है।


दरअसल, इसे इस तरह लिखना कि मुझे "निर्धारित करता है ..." के साथ शुरू करने के मानक तरीके के लाभ का एहसास हुआ । मुझे लगता है कि यह अधिक पठनीय है क्योंकि यह पहले बताता है कि यह क्या कर रहा है, यह बताने से पहले कि इसका परिणाम क्या है। यह अप्रत्यक्षता से एक कदम कम है। मैं सहमत हूँ कि returnsMicrosoft से रास्ता बहुत लंबा है। यदि इसे कुछ भी करना चाहिए, तो यह केवल यह आश्वस्त करना है कि इसका मतलब है कि यह मेल खाता है, और गलत यह नहीं है।
स्टीवन ज्यूरिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.