Написання документації для добре зрозумілих методів, таких як рівний на Java


10

Чи є хорошою практикою писати коментарі до широко відомих методів, таких як рівний, порівнянняДо тощо?

Розглянемо наведений нижче код.

 /**
 * This method compares the equality of the current object 
  with the object of same type
 */
@Override
public boolean equals(Object obj) {

               //code for equals

     }   

Моя компанія надає дані для коментарів, як описано вище. Чи потрібний вище коментар Javadoc? Хіба це не очевидно і добре зрозуміло, що робить метод рівних та лайків (порівняти, порівнювати) тощо?

Які ваші пропозиції?


3
Ваш поточний коментар невірний. Ваш підпис методу правильний для прийняття загального Об'єкта, але у вашому коментарі написано "об’єкт одного типу".
c_maker

4
Я скоріше побачу коментар, що пояснює, що означає рівність для цього об’єкта. "Рівність" - це слизький термін. У Common Lisp є численні функції рівності, і ви вибираєте відповідну функцію.
Девід Торнлі

У цьому випадку я маю на увазі два об'єкти, які є рівними «змістовно». Наприклад, два об'єкти працівника рівні, якщо вони мають однакове посвідчення працівника, а не кажуть, що вони носять однакову кольорову сорочку.
Vinoth Kumar CM

6
@Vinoth: "осмислений спосіб" - це саме те, що потрібно документувати :)
c_maker

Відповіді:


6

JavaDoc вже підтримує успадкування коментарів . Згідно з документацією, "конструктори, поля та вкладені класи не успадковують коментарі doc", але такі методи, як equals()will. Оскільки в Objectкласі є добре задокументований equals()метод, ви можете просто мати можливість успадкувати цю документацію без проблем.

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

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


Мені відомо про спадкування. Але компанія «доручає» нам писати явні документи Java.
Vinoth Kumar CM

3
@Vinoth Якщо це політика компанії, то ви нічого не можете зробити, окрім того, щоб написати їх або намагатися змінити політику. Якщо ви використовуєте сучасні інструменти розвитку, то ця політика застаріла. Що сприяє цій політиці? Коментарі JavaDoc перетворюються на веб-сторінки, а сучасні IDE дозволяють переглядати коментарі JavaDoc під час написання програмного забезпечення, незалежно від того, звідки походить коментар (явний або успадкований).
Томас Оуенс

@Thomas: Є благальне прощення, а не запит дозволу: Просто мовчки згорніть правила і подивіться, чи хтось скаржиться.
dimimcha

@dsimcha Можливо, але якщо це повториться, це може бути погано для роботи. Це не річ один чи два.
Томас Оуенс

9

У моїй команді ми зазвичай використовуємо @inheritDocанотацію до equals()і , hashcode()але я бажаю , щоб ми не робили.

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

Добре хоча б задокументувати, які атрибути беруть участь у методі і навіть, можливо, чому це так.


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

2

Пам'ятайте, що коментарі допомагають розробникам будь-якого роду, якщо вони правильні.

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

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

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


2

Вкрай погана практика засмічувати код вакуумними коментарями на кшталт:

/**
 * This method compares the equality of the current object with the object of same type...
 */

Це говорить нічого корисного. Гірше, вона бідна і в стилі, і в граматиці:

  1. Коментарі ніколи не повинні починатися з "Цей метод" чи "Цей клас" чи "Цей". Коментар асоціюється з методом або класом за його місцезнаходженням у вихідному файлі.

  2. "об'єкт" повинен читати "об'єкт"

  3. "Порівняння рівності" має сенс лише в тому випадку, якщо один об'єкт може мати більше "рівності", ніж інший. Ця функція не порівнює "рівність"; вона порівнює об'єкти, щоб визначити їх рівність між собою.

Натомість коментар повинен вказувати, коли два об'єкти вважаються рівними. Тут я б повністю опустив опис методу і документував лише повернене значення, наприклад:

public class Fraction {
  private int numerator, denominator;
  /**
   * @return true if <i>this</i> is numerically equal to <i>other</i>
   */
  public boolean equals(Fraction other) {
    return numerator * other.denominator == other.numerator * denominator;
  }
...
}

Створені коментарі до тривіальних методів get / set - найгірші з усіх.


1

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

Для рівних, можливо, хочемо зазначити, що порівняння проводиться лише в первинному ключі при порівнянні сукупності, підтримуваної базою даних, оскільки це не повністю відповідає документації для Object.equals().


0

На мою думку, і я думаю, що це може бути суперечливим, ви повинні вказати в коментарі, в якому класі ви перекрили клас. Потім півроку, коли вам цікаво, реалізовано це чи ні, ви не зможете побачити, не відкриваючи клас.


0

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

Крім того, я б сказав, що якщо код, який ви створюєте / редагуєте, не є загальнодоступним API, тоді просто залиште javadocs для загальних методів, оскільки вони просто додадуть безладу та шуму.

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