Некоторые из приведенных ниже высказываний носят весьма личный характер, хотя и с некоторым оправданием, и предназначены именно для этого.
Типы комментариев
Для краткой версии ... Я использую комментарии для:
- конечные комментарии, объясняющие поля в структурах данных (кроме них, я не использую однострочные комментарии)
- исключительные или целенаправленные многострочные комментарии над блоками
- общедоступная документация пользователя и / или разработчика, сгенерированная из источника
Читайте ниже для деталей и (возможно, неясных) причин.
Последние комментарии
В зависимости от языка, используются однострочные комментарии или многострочные комментарии. Почему это зависит? Это просто вопрос стандартизации. Когда я пишу код на C, я отдаю предпочтение старомодному коду ANSI C89 по умолчанию, поэтому я предпочитаю всегда иметь /* comments */
.
Поэтому я хотел бы иметь это в C большую часть времени, а иногда (в зависимости от стиля кодовой базы) для языков с C-подобным синтаксисом:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
Emacs хорош и делает это для меня M-;
.
Если язык поддерживает однострочные комментарии и не основан на C, я буду более склонен использовать однострочные комментарии. В противном случае, я боюсь, что теперь взял эту привычку. Что не обязательно плохо, так как заставляет меня быть кратким.
Многострочные комментарии
Я не согласен с вашей заповедью, используя однострочные комментарии, так как это более привлекательно. Я использую это:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
Или вот это (но я уже не так часто, за исключением личной базы кодов или в основном для уведомлений об авторских правах - это исторически для меня и происходит из моего образования. К сожалению, большинство IDE облажаются при использовании автоформатирования) :
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
Если это действительно необходимо, то я бы прокомментировал встроенное, используя то, что упомянул ранее для трейлинг-комментариев, если имеет смысл использовать его в трейлинг-позиции. На особом обратном случае, например, или к документу switch
«s case
заявления (редко, я не часто использовать переключатель), или когда документ ветви в if ... else
потоке управления. Если это не один из них, то, как правило, блок комментария вне области действия, описывающий шаги функции / метода / блока, имеет больше смысла для меня.
Я использую их исключительно в исключительных случаях, за исключением случаев, когда кодирование выполняется на языке без поддержки комментариев документации (см. Ниже); в этом случае они становятся более распространенными. Но в общем случае, это действительно просто для документирования вещей, которые предназначены для других разработчиков и являются внутренними комментариями, которые действительно должны выделяться. Например, чтобы документировать обязательный пустой блок, такой как «принудительный» catch
блок:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
Что уже безобразно для меня, но я бы терпел в некоторых обстоятельствах.
Документация Комментарии
Javadoc & al.
Я бы обычно использовал их в методах и классах для документирования версий, представляющих функцию (или изменяющих ее), особенно если это для общедоступного API, и для предоставления некоторых примеров (с понятными случаями ввода и вывода и особыми случаями). Хотя в некоторых случаях для документирования их лучше было бы использовать единичный случай, юнит-тесты не обязательно читаются человеком (независимо от того, какую DSL-штуку вы используете).
Они немного меня раздражают, документируя поля / свойства, так как я предпочитаю завершающие комментарии для этого, и не все рамки генерации документации поддерживают конечные комментарии документации. Например, Doxygen, а JavaDoc - нет, а это значит, что вам нужен верхний комментарий для всех ваших полей. Я могу пережить это, хотя, поскольку строки Java в большинстве случаев относительно длинные, в любом случае, последний комментарий может меня выпугнуть, если расширить линию за пределы моего порога допуска. Если бы Javadoc когда-нибудь подумал об улучшении этого, я был бы намного счастливее.
Закомментированный код
Я использую однострочные только по одной причине, в языках, подобных C (за исключением случаев компиляции для строгого C, где я их на самом деле не использую): чтобы закомментировать материал при кодировании. Большинство IDE будут иметь переключатели для однострочных комментариев (с выравниванием по отступу или по столбцу 0), и это подходит для этого варианта использования для меня. Использование переключателя для многострочных комментариев (или выбор в середине строки для некоторых IDE) затруднит легкое переключение между комментариями / комментариями.
Но так как я против закомментированного кода в SCM, он обычно очень недолговечный, потому что я буду удалять закомментированные фрагменты перед фиксацией. (Прочтите мой ответ на этот вопрос на тему «отредактировано в комментариях и SCM» )
Стили комментариев
Я обычно пишу:
- завершите предложения с правильной грамматикой (включая пунктуацию) для комментариев документации, поскольку они должны быть прочитаны позже в документе API или даже как часть сгенерированного руководства.
- хорошо отформатированный, но более слабый пунктуация / заглавные буквы для многострочных блоков комментариев
- конечные блоки без знаков препинания (из-за пробела и, как правило, из-за того, что комментарий краткий, который больше напоминает оператор в скобках)
Заметка о грамотном программировании
Возможно, вы захотите заинтересоваться грамотным программированием , о котором рассказывает Дональд Кнут .
Парадигма грамотного программирования [...] представляет собой отход от написания программ в порядке и порядке, наложенных компьютером, и вместо этого позволяет программистам разрабатывать программы в порядке, требуемом логикой и потоком их мыслей. 2 Грамотные программы написаны как непрерывное изложение логики на обычном человеческом языке, очень похожем на текст эссе [...].
Инструменты грамотного программирования используются для получения двух представлений из грамотного исходного файла: одно подходит для дальнейшей компиляции или выполнения компьютером, «запутанный» код, а другое - для просмотра в виде отформатированной документации, которая называется «сотканной» из грамотный источник.
В качестве дополнительного примечания и примера: структура JavaScript underscore.js , несмотря на несоответствие моему стилю комментирования, является довольно хорошим примером хорошо кодированной базы документов и правильно сформированного аннотированного источника - хотя, возможно, не лучшим для использования в качестве ссылка на API).
Это личные условности. Да, я могу быть странным (и вы тоже). Это нормально, если вы соблюдаете и соблюдаете кодовые правила вашей команды при работе с коллегами или не подвергаете себя радикальной атаке их предпочтения и не сожительствуете . Это часть вашего стиля, и вы должны найти тонкую грань между разработкой стиля кодирования, который определяет вас как программиста (или как последователя школы мысли или организации, с которой у вас есть связь) и соблюдением соглашения группы о согласованности ,
:3,7 Align //
выравнивание комментариев в строках 3-7.