Вы пишете заголовки в комментариях к коду? [закрыто]


17

Я просматривал какой-то старый код, который я написал (первый год в университете), и заметил, что я обычно писал заголовки комментариев, предшествующие различным частям кода. Вещи как (это из игры Монополия):

/*Board initialization*/
...code...

/*Player initialization*/
...code...

/*Game logic starts here*/
/*Displaying current situation*/
...code...

/*Executing move*/
...code...

/*Handle special event*/
...code...

/*Commit changes, switch to next player*/
...code...

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

Ответы:


24

Это кодовый запах. Это говорит о том, что, а не почему .

Если это необходимо, разделите код на маленькие функции.


4
Нет смысла иметь функции, чтобы иметь функции.
Пол Натан

30
Правильно: если код заслуживает такого комментария /*Board initialization*/, вероятно, он должен быть в вызываемой функции InitializeBoard. Если ваша структура кода достаточно ясна, вам не нужны комментарии.
Тим Робинсон

3
«Что» полезно знать, и часто не очевидно из взгляда на код. Эти комментарии проясняют общее намерение.
DarenW

4
@DarenW - но так делают функции / процедуры / методы. И последующие имеют дополнительное преимущество модульности кода, что облегчает понимание .
Стивен С

3
Еще одним преимуществом этого является то, что такие функции, как InitializeBoardили InitializePlayerбудут появляться в списках браузеров функций / модулей / классов большинства IDE, тогда как комментарии не будут. Более простая навигация.
Стив Фэллоуз

13

Я делаю это все время. И то, и другое, чтобы пометить, что делает код, и, как вы уже сказали, возможно, более важно, чтобы было проще сканировать и находить кусок кода. Иногда я также записываю вовлеченный процесс в комментарии и по мере необходимости «заполняю» код под комментариями.


7
+1 - ясность это хорошая вещь. Я не согласен с утвержденным ответом о том, что это кодовый запах. Если это добавляет ясности - сделай это.
quick_now

2
Если это нарушает ОАОО, то не делайте этого. Это избыточно и имеет тенденцию не синхронизироваться с кодом, который он документирует. Поместите код в функцию и назовите функцию тем, что она делает. Современные IDE позволяют легко изменить имя функции и обновить все ссылки. Таким образом, все экземпляры остаются в курсе.
Скотт Уитлок

3
+1 от меня. В больших файлах кода мне нравится иметь больше, чем просто пробел, разделяющий логические разделы. Да, я думаю, что если ваша функция слишком длинная, вам нужно разделить ее на части, но я считаю, что ее легче читать, если части разделяются комментариями.
Энтони,

6

Мне интересно, как много людей не любят практику, не имея возможности четко объяснить, почему. Причины, по которым подобные комментарии не одобряются, заключаются в том, что они являются признаком того, что вы нарушили принцип единой ответственности., Это конкретное имя обычно используется только в контексте ОО, но общая концепция также называется сплоченностью и применяется к другим парадигмам. Школы обычно не преподают такие принципы проектирования до конца программы обучения, если вообще ее проводят. Фактически, некоторые учителя предписывают это нарушение, чтобы упростить оценку, сложив все в один файл. Таким образом, ваше невежество новичка простительно, и тот факт, что вы заметили «что-то» не так и попытался уточнить комментарии, даже похвален в данных обстоятельствах, но в целом лучше исправить неясную схему, а не пытаться оформить ее комментариями.


4

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

Я бы сказал, если вы работаете в команде, чтобы придумать стандарт, чтобы вы все, по крайней мере, писали и комментировали одинаково, так что смотреть на код стало проще.


3

Я делаю это, потому что я часто сообщаю о намерениях самому себе или по сути помещаю удобную закладку для таких вещей, как «Очистка данных начинается здесь». Обычно под этим названием дается краткое описание логики того, что я делаю и почему.

Мне нравится избыточность. Если по той или иной причине я теряю свой лабораторный блокнот или мне приходится пересматривать код, который я написал несколько лет назад, мне не нравится собирать воедино то, что я делал и почему я это делал. Если хотя бы часть этой логики присутствует в коде, ее достаточно документировано, чтобы я по крайней мере снова работал с ней.

Я думаю, что отчасти я склоняюсь к этому, потому что мое программирование является статистическим по своей природе и, следовательно, несколько повторяющимся. В то время как может быть несколько фрагментов кода, в которых у меня есть полезно названная функция для поиска, у меня может быть несколько десятков довольно схожих применений чего-то вроде общей линейной функции модели. Полезно быть в состоянии найти и выяснить, какой из этих кодов «насколько чувствительны результаты к варианту А по сравнению с вариантом В или С», а какой-то другой. Это часто ускоряется названиями.


Комментарии, в которых указывается цель бизнеса / цель высокого уровня, очень важны. Они обеспечивают подтверждение и поддержку понимания. Модульные тесты также могут быть объявлены избыточными - я бы сказал, что документирование и понимание кода по крайней мере так же важно, как и его тестирование.
Томас В.

2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.