Чому важливі /// блоки коментарів?


49

Хтось одного разу сказав, що ми повинні префіксувати всі наші методи /// <summary>блоками коментарів (C #), але не пояснив чому.

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

Чи є якісь вагомі причини використовувати /// <summary>блоки коментарів у вашому коді?

Я зазвичай постійно користуюся //коментарями, /// <summary>мені це було цікаво лише про ті блоки.


1
Я не був впевнений, чи були ці блоки коментарів особистими уподобаннями або рекомендованими стандартами
Рейчел

1
Я також думаю, що так.
Райан Хейс

30
Я думаю, що саме це питання належить тут. Є хороший шанс, що це буде закрито в потоковому потоці як суб'єктивне.
Paddyslacker

Щоб створити документацію, використовуйте блоки <summary>. Це має сенс, якщо ви створюєте API для використання іншими. Це робити для кожного методу є надмірним і зменшує вашу гнучкість.
Макнейл

Відповіді:


91

Використовуйте їх якомога більше.

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


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

4
Крім того, якщо ви використовуєте Visual Studio і починаєте рядок з /// безпосередньо перед оголошенням класу, методу або поля, VS створить для вас структуру документації XML - вам просто доведеться заповнити її. Я згоден, що вона займає багато місця на екрані, але я б сказав гідний компроміс. Крім того, F # має кращу підтримку для нього (наприклад, вам не доведеться використовувати <summary> та </summary>, оскільки вони є "припущеними").
ShdNx

7
Оскільки ця відповідь - це вже найкращий вибір, я просто додам свій коментар: Коли я дізнався, що резюме використовується для інтелігенції, і мої проекти зросли до їх теперішнього розміру, я був дуже радий, що знайшов цю особливість. Запам'ятовування того, для чого призначені мої методи та заняття, стало величезною проблемою, і документування коду за допомогою цього механізму значно спростило речі, що дозволило зосередитись на новому коді та застосуванні, а не намагатися запам'ятати те, що було зроблено місяцями тому.
JYelton

3
Ще одне, що потрібно додати: ці коментарі не збираються в dll, ви повинні доставити пов'язаний файл XML з dll.
Бенджол

Вони корисні, але роблять поточний клас дуже нечитабельним. Я хотів би, щоб був інший спосіб, який не захаращує код.
Jeroen van Langen

16

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

Крім того, використовуйте їх спільно з Sandcastle та конструктором файлів довідки Sandcastle , який приймає вихід XML і перетворює його на прекрасну документацію у стилі MSDN.

Останнє місце, де я працював, ми щовечора переробляли документацію і розміщували її як внутрішню домашню сторінку. Ініціали компанії були MF, тож це було MFDN;)

Зазвичай, хоча я просто створюю .chm файл, який легко поділитися навколо.

Ви будете здивовані, як ви залежать від того, щоб документувати все, як тільки ви починаєте бачити це у форматі MSDN!


1
Посилання на блог видається мертвим (остання публікація 5 років тому зі зламаним html по всій сторінці), і місцезнаходження проекту перемістилося. Чи є у вас оновлене посилання на Sandcastle?

12

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

В іншому випадку подумайте серйозно, щоб не використовувати такі коментарі. Ви можете уникнути їх у більшості випадків, змінивши такий код:

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool SecurityCheck( User user ) {

    }

до

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool IsAuthorizedToAccessResource( User user ) {

    }

до

    public bool IsAuthorizedToAccessResource( User user ) {

    }

11
Хоча я погоджуюся, що код повинен самостійно документувати якомога частіше, я пропоную використовувати такі типи коментарів, коли це можливо (і частіше, ніж загальні // коментарі). /// XML-коментарі розроблені для роботи з IntelliSense, що може полегшити розробку протягом декількох місяців, коли ви намагаєтесь реалізувати створену бібліотеку і не дуже пригадуєте, як вона більше працює.
Метт Дітроліо

2
І я думаю, що не тільки з точки зору Intellisense, але з точки зору автоматичного створення документації також корисні коментарі xml. Але як і у всіх коментарях, це відчуває лише, якщо самі коментарі корисні та додають до самодокументованого коду.
Вайбхав

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

3
@JYelton: ваш коментар хибно представляє мою відповідь. Я мав на увазі більш описові імена, але не обов'язково набагато більш багатослівні, звичайно, не 60-символьний ідентифікатор для часто називається публічної функції. Крім того, у вас є те, що, здається, є вузькоспеціалізованою функцією, але для цього потрібен дуже загальний тип даних (XmlDocument) - це один запах коду. Потім ваш 60-символьний ідентифікатор описує "як", а не "що" - публічного методу. Це ще один запах. Головне повідомлення: подумайте спочатку про код, а не про коментар.
ажеглов

2
@JYelton Проблема з назвою вашого методу полягає не в тому, що він є описовим, а в тому, що він описує принаймні дві окремі операції, і тому його слід переробити в принаймні два незалежні методи.
Ніл

4

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

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

Але все одно ви їх нарізаєте, підтримуєте або видаляєте.


11
Іменування - одне, але перелік обмежень щодо параметрів або потенційно викинутих винятків все ще є цінним.
Адам Лір

Так, я визнаю, що у вас є точка, але більшість випадків обмеження параметрів очевидні, чи не так?
Джон Макінтайр

Не впевнений, що я згоден з Джоном. З цією логікою жоден із методів .net Framework не повинен отримати будь-якої допомоги Intellisense.
Вайбхав

1
@vaibhav - я сказав: "Я рекомендую використовувати їх у будь-яких публічних класах, методах та властивостях в API, бібліотеці тощо" ..., що охоплюватиме те, про що ви говорите, чи не так?
Джон Макінтайр

1
@John - дивно, я міг присягнути, що взагалі прочитав щось інше, коли написав цей коментар. Тому що ваш другий абзац - це саме те, про що я говорив в іншому потоці. Отже, я повинен мати скелі в голові, щоб написати цей коментар. Так, я згоден з цим.
Вайбхав

2

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

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


1

Так, я їх створив. [при створенні нових систем з нуля]

Ні, я ніколи від них не вигравав. [під час роботи над існуючими системами, які потребували обслуговування]

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


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

1

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

Це один із найпомітніших способів документувати свій код.

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


1

" Її треба дуже використовувати, як я;) "

Раніше я грав із коментарями (///). Для класу ви можете просто зробити такий коментар

namespace test
{
    /// <summary>
    /// Summary description for Calendar.
    /// </summary>
    public partial class DatePicker : System.Web.UI.Page
    {

Але для методу ви можете доповнити більше, описуючи параметри та типи повернення.

/// <summary>
/// Assign selected cases to the participating users based on the filters and configurations
/// </summary>
/// <param name="noOfParticipants">No. of participants to the Table</param>
/// <param name="value">Value of the participant</param>
/// <returns>No Of Cases Assigned on successfull completion</returns>
public long AssignCasesToParticipatingUsers(int noOfParticipants,string value)
{

Ви можете використовувати ярлик для створення цього коментаря (///+Tab).


0

використовуючи їх за винятком бібліотек

Саме тоді вони корисні. Увімкнення генерації XML Документації, і посилання на збірку, без її проекту, буде демонструвати більше деталей у інтелігенції.

Але для внутрішніх справ поточного проекту вони просто заважають.


0

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


0

Я використовую еквівалент у VB (оскільки вони не дозволять мені використовувати C # - мабуть, це занадто важко ... без коментарів.) Я вважаю їх дуже зручними. Більшу частину часу я чекаю, поки процедура або функція буде значно завершена перед тим, як вносити їх, хоч би щоб уникнути необхідності змінювати коментарі - або мати їх "поза синхронізацією".

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

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

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