Чи повинен коментар методу включати як підсумок, так і опис повернення, коли вони часто такі схожі?


10

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

Мені подобається дотримуватися правила додавання коментарів XML для кожного публічного члена, враховуючи, наскільки мені подобається IntelliSense у Visual Studio.

Однак є одна форма надмірності, яка турбує навіть надмірного коментаря, як я. Як приклад візьмемо 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взагалі опускаючи документацію.

Повертає істину, коли Список містить елементи, які відповідають умовам, визначеним вказаним предикатом, інакше помилково

Крім того, документація про повернення не відображається в IntelliSense, тому я краще записувати будь-яку негайно відповідну інформацію в 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
ви викликаєте метод і не хочете знати, що він робить !?
jk.

1
@jk: Мається на увазі, що він це вже робив заздалегідь. Тільки коли це не вдається, він хоче «зосередитись» на поверненій вартості. +1 за останній абзац, це, по суті, так і я відчуваю. Навіть якщо документація констатує очевидний факт, як у моєму прикладі, це заспокоює читача його очікуваннями. При правильному керуванні коментарями йдеться: "Цей метод продуманий належним чином, і не робить нічого іншого, як зазначено тут", як у документації msdn.
Стівен Євріс

2

Моє використання:
<summary>описує, що робить метод (щоб отримати <returns>).
<returns>описує повернене значення .

Посилання на MSDN: <summary>.<returns>


Дякуємо за посилання Але ніде документація msdn про summaryстан не описує "що робить метод". Я проголосував, поки ви не знайдете час, щоб оновити свою відповідь, щоб уточнити різницю між тим, що повідомляє msdn, і тим, що ви формулюєте. ; p
Стівен Євріс

2
Незалежно від того, каже MSDN про це чи ні, це насправді хороший настанов. У вашому прикладі вам не доведеться повторювати весь підсумок, ви можете просто сказати "повертається, trueякщо присудок збігався". Якщо комусь потрібно знати, що являє собою відповідність, він може прочитати решту документації.
Blrfl

@Blrfl: Я не кажу, що керівництво неправильне. Я кажу, що неправильно посилатися на джерело, маючи на увазі, що щось там написано, коли його немає. Звідси голосування проти. Я дуже хотів би, щоб ця відповідь була відредагована.
Стівен Євріс

@StevenJeuris: Посилання на документацію MSDN були лише додатковою інформацією. MSDN НЕ каже: "Коли у вас є <summary>і <returns>зробіть це". Як сказав Блрфл, це лише настанова, яку можна використовувати, а може і не хоче використовувати.
Джейк Бергер

1
@StevenJeuris: Хоча через те, як це було написано, я міг бачити, як хтось може зробити висновок, що він походить із MSDN.
Джейк Бергер

1

Чому вам коли-небудь потрібно документувати декларації окремо від резюме?

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

Зазвичай я пишу лише <summary>частину у власному коді, формулюючи її так, як ви сказали "Повертається _ ".

Я зазначаю, що абонент повинен знати, що не очевидно з назви методу та параметрів методу (та їх назв). Будемо сподіватися, що назва методу та параметри дають зрозуміти, що коментар може бути дуже коротким.


1

Мене останнім часом розірвало те саме філософське питання, і я досі не впевнений, що таке хороше рішення. Але поки що це був мій підхід ...

  • Документація методу описує лише те, що потрібно знати зовнішнім абонентам. Він не говорить про те, як ця робота виконується внутрішньо, але згадує а) чому абонент хотів би викликати цей метод, б) які очікувані результати виклику методу. Якщо є необхідність документувати, як працює метод, я вкладаю це в тіло коду.
  • Якщо метод має достатню складність до нього, то загальний опис та окремий розділ [return] видаються виправданими. Ви не хочете, щоб читач читав весь опис і намагався зробити висновок, як інтерпретувати повернене значення.
  • Якщо метод настільки простий, що найкращим способом описати те, що він робить, є сказати щось на кшталт "Цей метод повертає адресу людини", то я пропускаю розділ [return], оскільки додавання, здавалося б, суперечить принципу DRY, і я величезний прихильник цього. Здається, що в цю категорію потрапляє багато методів одноколірних аксесуарів.

Так, я можу зв'язатись із згаданими пунктами і більш-менш дотримуватися їх. Проблема полягає в тому, що це досить суб'єктивна умова, яка може бути причиною того, що Microsoft просто вирішила завжди додавати returnsзамість цього. Я також помічаю, що вони завжди використовують одну і ту ж формулу, наприклад "true if ...; в іншому випадку false ". Цікаво, чи вказали вони для цього конвенцію.
Стівен Євріс

0

Резюме має бути настільки описовим, як і корисним; описи параметрів і поверненого значення повинні бути короткими і солодкими. Якщо у вас є вибір між одним словом і п'ятьма, використовуйте одне. Давайте підкреслимо ваш приклад:

вірно, якщо Список містить один або більше елементів, які відповідають умовам, визначеним зазначеним предикатом; в іншому випадку помилково.

стає

вірно, якщо будь-який елемент списку відповідає присудком; інакше помилково.


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