क्या किसी विधि के हस्ताक्षर में हर पैरामीटर के लिए एक javadoc टिप्पणी लिखना आवश्यक है?


18

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

सबसे पहले, मुझे लगता है कि पैरामीटर नाम वर्णनात्मक और स्व-दस्तावेजीकरण होना चाहिए। यदि यह तुरंत स्पष्ट नहीं है कि आपके पैरामीटर क्या हैं, तो आप शायद इसे गलत कर रहे हैं। हालाँकि, मैं समझता हूँ कि कभी-कभी यह स्पष्ट नहीं होता है कि एक पैरामीटर क्या है, इसलिए उन मामलों में, हाँ, आपको पैरामीटर की व्याख्या करते हुए एक javadoc टिप्पणी लिखनी चाहिए।

लेकिन मुझे लगता है कि हर पैरामीटर के लिए ऐसा करना अनावश्यक है। यदि यह पहले से ही स्पष्ट है कि पैरामीटर क्या है, तो javadoc टिप्पणी बेमानी है; तुम सिर्फ अपने लिए अतिरिक्त काम पैदा कर रहे हो। इसके अलावा, आप किसी ऐसे व्यक्ति के लिए अतिरिक्त कार्य बना रहे हैं जिसे आपके कोड को बनाए रखना है। समय के साथ तरीके बदलते हैं, और टिप्पणियों को बनाए रखना लगभग उतना ही महत्वपूर्ण है जितना कि आपके कोड को बनाए रखना। आपने कितनी बार "एक्स डू वाई फॉर जेड कारण" जैसी टिप्पणी देखी है, केवल यह देखने के लिए कि टिप्पणी आउट-ऑफ-डेट है, और वास्तव में विधि एक्स पैरामीटर को भी नहीं लेती है? यह हर समय होता है, क्योंकि लोग टिप्पणियों को अपडेट करना भूल जाते हैं। मैं तर्क दूंगा कि भ्रामक टिप्पणी किसी भी टिप्पणी की तुलना में अधिक हानिकारक है। और इस तरह ओवर-कमेंटिंग का खतरा है: अनावश्यक दस्तावेज बनाकर, आप '

हालांकि, मैं अपनी टीम के दूसरे डेवलपर का सम्मान करता हूं, और स्वीकार करता हूं कि शायद वह सही है और मैं गलत हूं। यही कारण है कि मैं अपने प्रश्न को आपके साथ ला रहा हूं, साथी डेवलपर्स: क्या वास्तव में EVERY पैरामीटर के लिए एक javadoc टिप्पणी लिखना आवश्यक है? यहां मान लें कि कोड मेरी कंपनी के लिए आंतरिक है, और किसी भी बाहरी पार्टी द्वारा उपभोग नहीं किया जाएगा।


कई जावा आईडीई (विशेष रूप से इंटेलीज) एक लापता जावदॉक पैरामीटर को दस्तावेजी चेतावनी के रूप में टैग करेंगे
गैरी रोवे

NetBeans और ग्रहण भी होगा।
द्रालो

जवाबों:


38

Javadoc (और, Microsoft शब्द में, XMLDoc) एनोटेशन टिप्पणियां नहीं हैं , वे प्रलेखन हैं

टिप्पणियां उतनी ही विरल हो सकती हैं जितनी आप उन्हें चाहते हैं; यह मानते हुए कि आपका कोड आधा पढ़ा जा सकता है, तब साधारण टिप्पणियाँ भविष्य के डेवलपर्स को उस कोड को समझने / बनाए रखने में सहायता करने के लिए केवल साइनपोस्ट हैं जो कोड को पहले से ही दो घंटे से घूर रहा है।

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

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

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


1
+1: यह कोड के समान ही आवश्यक है। यह सिर्फ अच्छा स्वचालित परीक्षण नहीं है।
एस.लॉट

यदि किसी विधि के पैरामीटर में उदाहरण के लिए X और Y निर्देशांक के तीन जोड़े शामिल हैं, जो समांतर चतुर्भुज के आसन्न कोनों के रूप में व्याख्यायित किया जाएगा, तो क्या प्रलेखन के छह छोटे टुकड़े, प्रत्येक पैरामीटर के लिए एक, या उद्देश्य का वर्णन करना अधिक उपयोगी है समानांतर चतुर्भुज (X1, y1), (x2, y2), (x3, y3), और (X1 + x3-x2, y1 + y3-y2) के संदर्भ में विधि [उत्तरार्द्ध विपरीत हो रही है (x2, y2)]? यदि विधि का उद्देश्य पैरामीटर नामों के संदर्भ में परिभाषित किया गया है, तो मुझे लगता है कि मापदंडों के बारे में अतिरिक्त दस्तावेज़ीकरण कई मामलों में ज़रूरत से ज़्यादा होगा।
सुपरकैट

1
@supercat: मेरा तर्क है कि इस तरह के मामले में, आपको रिफैक्टिंग होना चाहिए, जैसे कि आपके पास एक एकल डेटा प्रकार है Point, और फ़ंक्शन को बस तीन Points(या बेहतर अभी तक एक सरणी / उनमें से चलने योग्य) लगता है। एक विधि में जितने अधिक पैरामीटर होते हैं, कॉल करने के लिए उतने ही अधिक अस्पष्ट होते हैं और अधिक अस्थिर इसके विनिर्देश समय के साथ बन जाते हैं।
हारून

@ चेतावनी: यह इस बात पर निर्भर करता है कि विधि का उपयोग कैसे किया जाएगा। एक अधिभार जो तीन को प्राप्त करता है Point, और एक जो प्राप्त करता है Parallelogram, वह सहायक हो सकता है यदि कई कॉलर ऐसी चीजों से गुजर सकते हैं। यदि, हालांकि, बहुत सारे Pointउदाहरणों का निर्माण बिना किसी उद्देश्य के किया जाएगा, लेकिन एक बार विधि को पारित किया जाएगा , तो वस्तुओं का निर्माण कोड को धीमा और पढ़ने में कठिन बना देगा। यदि एक भाषा समुच्चय का समर्थन करती है, जो डक्ट टेप के साथ एक साथ अटके हुए मूल्यों के एक समूह के रूप में होगा और व्यवहार करेगा, और एक कुल मिलाकर एक प्रकार का पैरामीटर पारित कर सकता है ...
Supercat

... मानों को ब्रेसिज़ में संलग्न करना, फिर वह प्रदर्शन और पठनीयता दोनों दृष्टिकोण से अच्छा हो सकता है। जावा में ऐसी कोई अवधारणा नहीं है; JVM- आधारित भाषा मापदंडों के लिए कुशलतापूर्वक ऐसी चीज़ का समर्थन कर सकती है (एक पैरामीटर Point p1का अनुवाद किया जा सकता है int p1_x, int p1_y), लेकिन JVM के पास इस तरह की चीज़ को वापस करने के लिए फ़ंक्शन के लिए कोई कुशल तंत्र नहीं है।
सुपरकैट

12

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

याद रखें: कुछ ऐसा है जो आपके लिए समझ में आता है कि किसी और के द्वारा पूरी तरह से अलग तरीके से व्याख्या की जा सकती है, चाहे आप इसे कितना भी सांसारिक क्यों न समझें (किसी ऐसे व्यक्ति के बारे में सोचें जो अंग्रेजी पढ़ने में उतना मजबूत नहीं है और अपने कोड को समझने की कोशिश कर रहा है)।

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


10

चलो इस धारणा से शुरू करते हैं कि डेवलपर चक्र वह संसाधन है जिसे हम संरक्षित करने की कोशिश कर रहे हैं।

तो इसका मतलब है कि देवों को स्व-स्पष्ट मापदंडों और वापसी मूल्यों का दस्तावेजीकरण करने में समय बर्बाद नहीं करना चाहिए?

अच्छा, चलो इसे तोड़ देते हैं।

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

यदि हम चुनते हैं और चुनते हैं, तो लागतें हैं:

  • अपनी टीम के अन्य डेवलपर (ओं) के साथ तर्क करना और जीतना जो सोचते हैं कि सब कुछ प्रलेखित किया जाना चाहिए।
  • प्रत्येक पैरामीटर के लिए, यह निर्धारित करना कि यह दस्तावेज होना चाहिए या नहीं।
  • आपकी टीम के साथ अधिक तर्क जब किसी के पास एक अलग राय होती है कि क्या एक पैरामीटर को प्रलेखित किया जाना चाहिए था।
  • समय कोड को शिकार करने और शोध पर खर्च करता है जब एक पैरामीटर जिसे आत्म-व्याख्यात्मक माना जाता था वह ऐसा नहीं करता है।

इसलिए, मैं सब कुछ करने के लिए सिर्फ दस्तावेज करना चाहूंगा। नकारात्मक पक्ष निश्चित है, लेकिन निहित है।


9

यदि आप वैसे भी जावदोक लिख रहे हैं, तो आप इसे "स्पष्ट" मापदंडों सहित पूरी तरह से लिख सकते हैं। वे आपके या अन्य डेवलपर के लिए स्पष्ट हो सकते हैं, लेकिन कोई भी नया जो इसे देख रहा है, वह प्रत्येक पैरामीटर के इरादे को जानने से लाभान्वित होगा।

Javadoc को ठीक से बनाए रखने के लिए, आपको अपने विकास के लिए ऐसे साधनों का उपयोग करने की आवश्यकता है जो आपकी सहायता करें। मन में ग्रहण आता है। बेशक, अगर यह महत्वपूर्ण है, तो आपको यह सुनिश्चित करना होगा कि टीम पर हर कोई टिप्पणी को शामिल करने के लिए कोड को बनाए रखने के लिए अपनी ओर से करता है।


3

यह मत भूलो कि कोड से अलग रहते हुए जावाडॉक को दृश्यमान बनाया जा सकता है, मुख्य उदाहरण जावा एपीआई ही है। एक विधि में हर पैरामीटर के लिए javadoc को शामिल नहीं करके आप विधि को गलत तरीके से प्रस्तुत कर रहे हैं और इसका उपयोग कैसे किया जा सकता है।


क्या "- वह तर्क जिसका पूर्ण मूल्य निर्धारित किया जाना है" वास्तव में Math.abs के प्रलेखन में कुछ भी जोड़ता है?
केविन क्लाइन

@ केविन क्लाइन सोच के लिए उपयोगी हो सकता है ;-)
गैरी रोवे

1

'आवश्यक' पूरी तरह से व्यक्तिपरक है। मुझे लगता है कि आप जो पूछ रहे हैं, वह आपकी स्थिति में है, क्या आपको एक टिप्पणी जोड़नी चाहिए । ' आपके एप्लिकेशन के दायरे या संदर्भ को न जानकर, हम आपके लिए उपयुक्त व्हाट्सएप को कैसे जान सकते हैं?

यदि यह सार्वजनिक सामना करने वाला कोड (यानी, कोड दूसरों के लिए उपयोग करने के लिए होता है, जैसे कि एपीआई) तो हाँ, हर एक पैरामीटर को दस्तावेज़ित करें। न मान लें कि पाठक परियोजना के बारे में उतना ही जानता है जितना आप करते हैं। लेकिन अन्यथा, आप और आपकी टीम को अपने निर्णय लेने के लिए।


6
मुझे लगता है कि यहां तक ​​कि अगर यह सार्वजनिक सामना नहीं कर रहा है, तो यह मुझे अपने कोड को समझने में मदद करता है जब मैं इसे सालों बाद देखता हूं: पी
डेमियन ब्रेख्त

1
इस दृष्टिकोण को "हेक हम नया आदमी बना देंगे लानत कोड को पढ़ने के बाद 4 साल में जाना होगा।" दृष्टिकोण।
टिम विलक्रॉफ्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.