Чи потрібно написати коментар javadoc для параметра «КОЖНЕ» у підписі методу?


18

Один із розробників моєї команди вважає, що потрібно написати коментар javadoc для параметра КОЖНО у підписі методу. Я не думаю, що це потрібно, і насправді я думаю, що це може бути навіть шкідливим.

По-перше, я думаю, що назви параметрів повинні бути описовими та самодокументованими. Якщо не відразу зрозуміло, для чого потрібні ваші параметри, ви, ймовірно, робите це неправильно. Однак я розумію, що іноді незрозуміло, що таке параметр, тому в цих випадках так, ви повинні написати коментар javadoc, що пояснює параметр.

Але я думаю, що це зайве для кожного параметра. Якщо вже очевидно, для чого цей параметр, коментар javadoc є зайвим; ви просто створюєте додаткову роботу для себе. Крім того, ви створюєте додаткову роботу для тих, хто має підтримувати свій код. Методи змінюються з часом, а підтримка коментарів майже так само важлива, як підтримка коду. Скільки разів ви бачили коментар на кшталт "X робить Y з причини Z" лише для того, щоб побачити, що коментар застарів, і насправді метод більше навіть не приймає параметр X? Це відбувається постійно, бо люди забувають оновлювати коментарі. Я б заперечував, що оманливий коментар шкідливіший, ніж взагалі ніякий коментар. Таким чином, є небезпека надмірного коментування: створивши непотрібну документацію, ви

Однак я поважаю іншого розробника в своїй команді і приймаю, що, можливо, він правий, і я помиляюся. Ось чому я ставлю своє питання до вас, колеги-розробники: чи дійсно потрібно написати коментар javadoc для ВСЕГО параметра? Припустимо, що код є внутрішнім для моєї компанії, і його не використовуватиме жодна сторона.


Багато Java IDE (зокрема Intellij) помітять відсутній параметр Javadoc як попередження щодо документації
Gary Rowe

NetBeans і Eclipse також будуть.
Давор Ждрало

Відповіді:


38

Анотації Javadoc (і, в слові Microsoft, XMLDoc) - це не коментарі , це документація .

Коментарі можуть бути такими ж рідкими, як ви хочете, щоб вони були; якщо припустити, що ваш код читається на півдорозі, то звичайні коментарі - це лише покажчики, які допоможуть майбутнім розробникам у розумінні / підтримці коду, на який вони вже дивилися протягом двох годин.

Документація являє собою договір між блоком коду і його абонентами. Це частина публічного API. Завжди припускайте, що Javadoc / XMLdoc потрапить або у файл довідки, або у спливаюче вікно автозаповнення / intellisense / заповнення коду, і його слідкують люди, які не вивчають внутрішній код вашого коду, а просто бажають використовувати його з якоюсь метою їхня власність.

Назви аргументів / параметрів ніколи не роз'яснюються. Ви завжди думаєте, що вони є, коли ви провели минулий день, працюючи над кодом, але спробуйте повернутися до нього після 2-тижневої відпустки, і ви побачите, наскільки вони насправді не справжні.

Не розумійте мене неправильно - важливо вибрати змістовні імена для змінних та аргументів. Але це стосується коду, а не документації. Не сприймайте фразу «самодокументування» занадто буквально; що мається на увазі в контексті внутрішньої документації (коментарі), а не зовнішньої документації (контрактів).


1
+1: Це так само важливо, як і сам код. Він просто не має хорошого автоматизованого тестування.
С.Лотт

Якщо параметри методу включають, наприклад, три пари координат X і Y, які будуть інтерпретуватися як суміжні кути паралелограма, то корисніше мати шість невеликих фрагментів документації, по одному на кожен параметр, або описати мету метод з точки зору паралелограма (x1, y1), (x2, y2), (x3, y3) та (x1 + x3-x2, y1 + y3-y2) [останній є протилежним (x2, y2)]? Якщо мета методу буде визначена назви параметрів, я вважаю, що додаткова документація про параметри у багатьох випадках буде зайвою.
supercat

1
@supercat: Я б заперечував, що в такому випадку вам слід переробити, щоб у вас був один тип даних Point, а функція просто займає три Points(а ще краще масив / ітерабельний з них). Чим більше параметрів має метод, тим більш непростим є виклик і тим нестабільніша його специфікація, як правило, стає з часом.
Aaronaught

@Aaronaught: Це дуже залежить від того, як буде використовуватися метод. Перевантаження, яка отримує три Point, і та, яка отримує а Parallelogram, може бути корисною, якщо багато хто, хто телефонує, може пройти такі речі. Якщо, однак, багато Pointекземплярів в кінцевому підсумку будуть побудовані не з метою, а передаватися методу один раз , тоді побудова об'єктів зробить код і повільніше, і важче читати. Якби мова підтримувала агрегати, які були б і поводяться як купа значень, скріплених з клейкою стрічкою, і можна було передати параметр типу агрегату просто ...
supercat

... додаючи значення в дужки, то це може бути добре як з точки зору продуктивності, так і з точки зору читабельності. У Java немає такої концепції; мова, заснована на JVM, може ефективно підтримувати таке поняття для параметрів (параметр Point p1може бути переведений на int p1_x, int p1_y), але JVM не має ефективного механізму для функції повернення такої речі.
supercat

12

Або коментуйте все, або нічого не коментуйте (очевидно, коментуючи все - це набагато кращий вибір). Подумайте про те, хто використовує ваш код, або перегляньте ваш API безпосередньо у вихідному файлі або в створеному файлі doc (тобто доксигенному виведенні). Невідповідності, як правило, призводять до плутанини, що призводить до часу, витраченого на перекопування джерела, щоб з'ясувати, чому щось не було прокоментовано, що призводить до втрати часу, якого можна було б уникнути, якби параметр просто коментувався в першу чергу.

Пам’ятайте: щось, що має для вас сенс, може трактуватися абсолютно по-різному кимось іншим, незалежно від того, наскільки приземленим ви вважаєте це (подумайте про того, хто не настільки сильний в читанні англійською мовою і намагається зрозуміти ваш код).

Сказавши все це, якщо інший розробник наголошує на важливості документування всього, то так само слід наголосити на тому, щоб документація була актуальною. Як ви вже сказали, є не набагато гірше, ніж застарілі коментарі (так само погано, якщо не гірше, ніж опущені документи).


10

Почнемо з припущення, що цикли розробників - це ресурс, який ми намагаємося зберегти.

Отже, це означає, що розробники не повинні витрачати час на документування очевидних параметрів та повернення значень, правда?

Що ж, давайте розбимо його.

Якщо ми документуємо все, припускаючи, що граничні коментарі дійсно тривіальні і не потребують думок і досліджень, вартість - це додатковий час для фактичного набору коментаря та виправлення помилок.

Якщо ми обираємо і обираємо, то витрати такі:

  • Отримайте та виграйте аргумент з іншим розробником у вашій команді, який вважає, що все має бути задокументовано.
  • Для кожного параметра визначайте, чи потрібно це чи не слід документувати.
  • Більше аргументів з вашою командою, коли хтось має іншу думку щодо того, чи повинен бути параметризований параметр.
  • Час витрачайте на пошук коду та досліджуйте, коли параметр, який вважався само собою зрозумілим, виявляється не таким.

Отже, я схильний би просто документувати все. Мінус певний, але міститься.


9

Якщо ви все одно пишете Javadoc, ви можете повністю написати його, навіть включаючи "очевидні" параметри. Вони можуть бути очевидними для вас або іншого розробника, але кожен, хто дивиться на це, отримав би користь від того, щоб знати наміри кожного параметра.

Що стосується належного підтримання Javadoc, вам потрібно використовувати засоби для своєї розробки, які допоможуть вам у цьому. Затемнення приходить на думку. Звичайно, якщо це важливо, ви повинні переконатися, що всі в команді виконують свою роль для підтримки коду, включаючи коментарі.


3

Не забувайте, що javadoc можна зробити видимим, відриваючись від коду, головним прикладом цього є сам Java API . Не включаючи javadoc для кожного параметра у метод, ви неправильно представляєте метод та спосіб його використання.


Чи "а - аргумент, абсолютне значення якого слід визначити" насправді щось додає до документації Math.abs?
Кевін Клайн

@Kevin cline може бути корисним для важкого мислення ;-)
Gary Rowe

1

"необхідний" є абсолютно суб'єктивним. Я думаю, що ви запитуєте: "у вашій ситуації, чи варто додати коментар javadoc". Не знаючи сфери чи контексту вашої програми, як нам знати, що підходить саме вам?

Якщо цей загальнодоступний код (тобто код, призначений для доступу інших, наприклад api), то так, документуйте кожен окремий параметр. Не припускайте, що читач знає про проект так само, як і ви. Але в іншому випадку, ви самі і ваша команда повинні приймати власні рішення.


6
Я вважаю, що навіть якщо це не громадськість, це допомагає мені зрозуміти власний код, коли я оглядаюся на нього через роки: P
Дем'ян Брехт,

1
Цей підхід також відомий як "Чорт, змусимо нового хлопця прочитати проклятий код через 4 роки після того, як ми поїхали". підхід.
Тім Вілліскрофт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.