Прокоментувати до або після відповідного коду [закрито]


34

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

Ну, де б не могли майбутні читачі зрозуміти сферу коментаря. Іншими словами, де б більшість програмістів / скрипторів не висловлювали таких коментарів.

Тож де більшість програмістів / скрипторів ставлять коментар: до чи після його коду?

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

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


3
Розглядає, що відбувається, коли ви ставите його після. Програміст читає код. Скажіть собі, що WTF це робить ??? Дивіться коментар. Прочитайте код ще раз. Десь зрозумійте це чи відмовтесь. Тож будьте приємні і уникайте частин 1 і 2, поставивши її зверху.
deadalnix

@deadalnix, спасибі, схоже, що це також є відповідь Діпана Мехти . (Дякую також всім відповідям поки що, і +1 кожному.)
msh210

Відповіді:


22

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

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


1
Відмітка, оскільки це єдина відповідь (поки що), яка чітко дає відповідь на питання, яке шукало не особисті переваги, а стандартну операційну процедуру, оскільки воно цитує MSDN.
msh210

1
@ msh210: Отже, ви віддаєте перевагу Microsoft перевагу особистих переваг інших хороших програмістів? Але ви знаєте, як Microsoft неправильно позначила угорську нотацію як стандарт? Так? Чи ти? Довіряйте лише здоровому глузду, не завжди бігайте з ордою або йдіть за найбільшим биком.
Сокіл

2
@Falcon, я ніколи не чув про угорську нотацію, і я підозрюю, що перевага MSDN була принаймні результатом ряду внесків працівників MS відповіді тут, навпаки, є авторськими.
msh210

43

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


9

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


7

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

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


6

Тож де більшість програмістів / скрипторів ставлять коментар: до чи після його коду?

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

Єдиний виняток, який я можу придумати, - це коментар, що позначає кінець раніше коментованого розділу, як це:

// BEGIN CRITICAL SECTION
lock(&myMutex);

doSomeThreadUnsafeStuff();

unlock(&myMutex);
// END CRITICAL SECTION

Джеф Раскін написав добре продуманий твір на коментарі, які варто прочитати. Він не каже, чи ставить свої коментарі перед кодом або після нього, але він каже, що він ніколи не ставить їх у порядок, і я ставлю на гроші багато грошей, які він не ставить після них.


4

Спробуйте коментувати лише там, де це дійсно необхідно; Код повинен намагатися самодокументувати, коли це можливо.

Однак, розміщення може залежати: Якщо ви використовуєте окремий рядок для коментаря, поставте його перед фактичним кодом. Якщо у вас є на одній лінії, поставте його після.

// this workaround is required to make the compiler happy
int i = 0;

Vs.

int i = 0; // make the compiler happy

Але ніколи:

int i = 0;
// this workaround is required to make the compiler happy


Перечитайте питання: воно вказує, що він запитує про коментар в окремому рядку.
msh210

2
@ msh210 Це ідеальна відповідь. "писати коментарі раніше". Це ще детальніше і навести можливу причину, чому ви можете подумати, що вони після "За винятком випадків, коли вони короткі та знаходяться в кінці рядка".
rds

3

Я насправді не великий фанат коментарів. Під час курсу інженерії програмного забезпечення мене познайомили з ідеєю коду самодокументування. Код - єдина на 100% гарантована правильна документація сама по собі - коментарі потрібно оновлювати, ретельно будувати та відповідати, інакше вони є пастками, які можуть бути гіршими, ніж коментарі. Лише я не почав працювати в магазині C ++ зі строгим керівництвом по стилю та змістовними умовами іменування, що я справді втілив цю концепцію.

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

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


10
Код самодокументування може відповісти "що" та "як", але як би добре не написано, код сам по собі рідко може відповісти на питання "чому?". Якщо є вичерпний документ з вимогами, ви можете іноді знайти відповідь там. В іншому випадку, коментарі - це часто все, що вам потрібно пояснити, чому код повинен робити те, що робить.
Ед Штауб

1
Я не згоден. Як говорить @EdStaub, коментуючи відповідь на інше питання, на іншому рівні. Також код не є обов'язково відкритим кодом. І навіть коли він є, я не хочу читати вихідний вихідний код, щоб знати, як ним користуватися.
rds

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

3
@Brian, "Чому" питання часто дуже дрібні - наприклад, обхід помилок в API та / або пояснення того, що щось, що виглядає не так, насправді правильне. Це лише кілька прикладів. Я не хотів би, щоб коментарі були вичерпним документом щодо вимог. Але я також не намагався би пояснити обґрунтування кожної невеликої деталі впровадження у специфікації вимог (або навіть у специфікації дизайну для цього питання).
Ед Штауб

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

2

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


2

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

if(date == CHRISTMAS){
     //Deliver presents
     val (nice, naughty) = partition(boysAndGirls);
     prepSled();
     findRudolph();
     putOnRedSuit();
     ...
}else{
     //Not Christmas, build toys
     monitorElves();
     ...
}

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

 //Check to see if it's a leap year
 if(year % 4 == 0){ ... }  

5
Обидва блоки коду мають коментарі до коду, який вони коментують.
msh210

ваші власні коментарі заперечували ваші обійми "на випадок" хе-хе) та +1 за те, що він робив приклад різдвяної тематики
Ахмед Масуд

1
@ msh210 Я бачу свої коментарі в першому прикладі як коментування тесту if (Різдво), а не як "про" наступні функції (тобто вони говорять "що це означає, що ми тут?") Вони передують блок коду, але я ніколи не бачив код, який мав ... code (); код (); / * коментар, що пояснює попередній блок * /} і не сприймав питання таким чином
Ларрі OBrien

1

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

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

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


1

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

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

[blank line]
/* comment */
{ code }
[blank line]

Ви знаєте, що коментар належить до коду, і він говорить вам, що робить код. Беручи до уваги, якщо ви бачите таке:

[blank line]
{ code }
/* comment */
[blank line]

Знову ви дуже добре знаєте, що коментар належить до цього коду, і це з’ясування того, як код робить те, що робить.


Як я завжди кажу: ваш твір без пояснень не допомагає мені стати кращою людиною. Люблю і вас!
Майк Накіс

1

Коментарі вище найкращі.

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

Код може (і повинен) бути "самодокументуванням", але якщо вам доведеться прочитати та зрозуміти кожен рядок коду, щоб зрозуміти, як працює метод. If a summary/ comment found in the last of method then it will be lot of coding time is spent searching for the chunk of code that we wish to edit. By using a summary comment on each block, I can quickly zero in on the block that is relevant to my task.

Коли я переслідував цю тему, я виявив, що більшість систем для документування, що читаються на комп'ютері (Doc XML, Doxygen, Java doc тощо) очікують, що коментар надійде перед кодом, на який він стосується, - краще залишатися сумісним із цим стандартом.

Я також згоден з потоком SO - Чи слід додавати коментарі після блоків коду, а не раніше? ..

Я також вважаю за краще знати спереду ...


1

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

    // Return an empty list if we failed to retrieve anything
    // I convert above to:
    logger.trace("Return an empty list if we failed to retrieve anything");

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

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