Код самодокументації проти Javadocs?


18

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

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

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

Які найкращі практики для цього? Де ви проводите межу між кодом самодокументування та javadocs?

Відповіді:


24

Код самодокументування (та коментарі до коду) та коментарі Javadoc мають дві дуже різні цільові аудиторії.

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

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


+1, це хороший дзвінок. Я думаю, що моя основна боротьба з цим полягає в тому, що я не бачу це як дві різні цільові аудиторії, але ви праві.
Андреас Йоханссон

1
@Andiaz - мені здається корисним розмежувати зовнішні краї системи (наприклад, сервісний API) та класи всередині неї. Я часто працюю над проектами, де конвенція полягає у зважуванні всіх публічних методів, але я приділяю набагато більше уваги зовнішнім класам, щоб дати деяку вказівку, як слід використовувати клас (та систему). У внутрішніх класах я припускаю, що читач має більше знань про домен і мінімізує javadoc, дозволяючи іменам методів говорити більше за себе.
Стів Джексон

3
@SteveJackson Я погоджуюся, однак я виявив, що використовую більше Javadocs (навіть для приватних членів), оскільки IDE (принаймні Eclipse та NetBeans) відображають коментарі Javadoc у підказках щодо завершення коду. Звичайно, вони не такі чисті, як інтерфейси для загального користування, вони дають поради / замітки іншим розробникам.
Томас Оуенс

24

Кодекс говорить, як . Коментарі кажуть, чому , а може, навіть, чому б і ні .

Ваша робота - надавати як майбутнім читачам, так і підтримуючим свій код. Покладіть усе, що можна, в код, а решта - в коментарі.

Зауважте, що найважче захоплювати дизайнерські рішення - пам’ятайте і про них.


2
+1: Це не "ані", ані в ексклюзивному сенсі. Це обоє в інклюзивному сенсі.
С.Лотт

Я безумовно згоден на це. Чи є ще щось, що ви могли б врахувати, якщо мова йде саме про javadocs? Можливо, я можу уявити, що опис того, що метод може бути корисним, наприклад, API.
Андреас Йоханссон

Javadocs дуже легко доступні з більшості IDE. Спростіть перехід до додаткової інформації.

+1: найкращі коментарі, які я бачив, включали посилання на статті, де використовувані алгоритми були обговорені глибоко; це не те, що можна самостійно документувати в назвах змінних / методів, і не обов'язково належать до doc-коментарів, оскільки алгоритм є частиною реалізації, а не інтерфейсом .
Стипендіати Доналу

4

Використання Javadocs не робить реальної різниці - оскільки створені документи містять ім’я ваших функцій разом із текстом із коментарів, абсолютно немає причин, чому ви повинні повторювати що-небудь у коментарях, що зрозуміло з самого імені функції.

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


3
+1 моїм улюбленим є те, коли стандарт коду компанії вимагає документально підтверджених методів, але кожен використовує генератор, який просто повторює те, що вже написано в коді. Набридливий і марний.
Криптик

1

Я думаю, що з javadocs все те саме, що і з будь-якою документацією - головне правило:

слідкувати за аудиторією

Чи багато людей читають ваші javadocs? Якщо так, то має сенс вкладати зусилля, щоб зробити це правильно.

Чи схильні ваші читачі пропускати код читання на користь вивчення javadocs? Якщо так, то вдвічі більше сенсу витрачати зусилля на його написання.

  • Це саме так з документацією JDK . Згадайте, Sun / Oracle витрачав багато зусиль на це, і, здається, вони мають хорошу окупність в документах API, які багато використовуються громадою.

Тепер це ваш випадок? Якщо ні, подумайте двічі, чи виправдані зусилля, вкладені в javadocs.

Як уже вказувалося вище, прислухайтеся до аудиторії, щоб з’ясувати шлях.

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

0

Я просто хочу прокоментувати занепокоєння, що коментарі Javadoc можуть застаріти. Хоча @JonathanMerlet правильно говорить, що Javadoc має бути стабільним, ви можете також допомогти, переглянувши Javadoc та коментарі, а також код під час експертної оцінки. Чи відповідають коментарі тим, що робить код? Якщо ні, то це неправильно, і наполягайте на розробнику виправити це. Спробуйте заохотити інших розробників робити те саме. Це допомагає постійно оновлювати не тільки зовнішню документацію (коментарі Javadoc), але й будь-які регулярні коментарі до коду. Це допомагає розробникам, які приходять після вашого рефакторингу, зрозуміти код більш швидко і легко, а також підтримувати його набагато простіше в майбутньому.


-1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.