Лучшие практики в написании комментариев и документации


20

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

Однако мы все еще живем в эпоху, когда хорошие разработчики часто пишут устаревшие или плохие комментарии - я заинтересован в повышении надежности и полезности моих комментариев.

В частности, я заинтересован в Java / Clojure / Python, но ответы не обязательно должны зависеть от языка.

Существуют ли какие-либо новые методы, которые проверяют комментарии и автоматически обнаруживают либо «неубедительные» комментарии (например, комментарии с магическими числами, неполные предложения и т. Д.), Либо неправильные комментарии (например, обнаружение неправильно введенных переменных или тому подобное).

И что еще более важно: существуют ли принятые «политики комментирования» или стратегии? Существует множество советов о том, как писать код, но как насчет «как комментировать»?

Ответы:


40
  • Имена / документация должны рассказать вам, что вы делаете.

  • Реализация должна рассказать вам, как вы это делаете.

  • Комментарии должны сказать вам, почему вы делаете это так, как вы делаете.


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

2
Я считаю, что во многих случаях в комментариях должно быть сказано, ЧТО вы делаете. Эта идея только «почему» комментариев, на мой взгляд, является анти-паттерном. Это миф, что вы можете написать весь код достаточно ясно, чтобы любой программист мог понять его с первого взгляда, и мой опыт подсказывает, что большинство программистов думают, что они пишут чистый код, а не так. Это то же самое, что сказать: «Мне не нужно называть эту функцию описательно, потому что любой может просто прочитать код в функции и посмотреть, что она делает». - это тоже не имеет смысла, не так ли?
— Даллин

2
@dallin, если ваш код не совсем понятен в том, что он делает; рассмотреть вопрос о рефакторинге. в противном случае добавьте комментарий, объясняющий, почему он реализован таким образом (который также объясняет, как лучше). Ваше сравнение с описательными именами - это яблоки / апельсины, описательное имя проясняет, где используется функция , и у вас может не быть доступа к исходному коду функции.
— фрик с трещоткой

@dallin: «Это миф, что вы можете написать весь код достаточно ясно, чтобы любой программист мог понять его с первого взгляда», - хотел бы поговорить с вами дядя Боб. - «Мне не нужно называть эту функцию описательно, потому что любой может просто прочитать код в функции, чтобы увидеть, что она делает». Дать хорошие и ясные имена переменным и методам - ​​это именно то, как программисты должны четко понимать, что их код делается!
— Клар

14

Это может быть спорным, но мой совет - написать как можно меньше комментариев. Вместо этого используйте красивые, понятные имена классов, имен переменных и методов. Напишите свой код наиболее понятным способом; и считайте это самым важным атрибутом вашего кода (кроме того, что он соответствует его требованиям). Оставляйте комментарии только в том случае, если вы сделали метод настолько ясным, насколько это возможно, и все же считаете, что он требует дополнительных пояснений.

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


1
Это хорошее начало, но я думаю, что для удовлетворения вопроса ОП вам нужно написать что-то, что отвечает его актуальным опасениям в отношении автоматической проверки.
— Роберт Харви

2
+1 - я также думаю, что комментарии должны использоваться только для объяснения того, почему код был написан. Я знаю , что if (a == b) then c();делает, но если я не знаю , почему он это делает - что, когда комментарий должен быть использован :)
— Deco

Деку - я полностью согласен. Комментарии хороши, когда я хочу понять, как конкретный метод вписывается в процесс в целом. Другими словами, ПОЧЕМУ вы вызываете этот метод, или ПОЧЕМУ он делает то, что делает.
— Дауд говорит восстановить Монику

Помимо ясности написанного кода, мы также должны сохранять идеи (мысли на уровне кода), мысли и т. Д., Используя комментарии TODO. Например, если вы видите, что функция / класс способна правильно обрабатывать текущий размер данных, но потенциально не сможет справиться с нагрузкой через 2 года, то обязательно напишите свое наблюдение, используя комментарий TODO. Будущие разработчики действительно оценят ваши усилия. Никогда не пытайтесь записывать эти вещи в отдельном текстовом документе, пока пишете код, никто не ссылается на такие документы.
— TechCoze


5

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


1
И Sphinx сравнивает код с документацией, чтобы обеспечить показатели покрытия.
— С.Лотт

3

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

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

Хотя это лучшее, что позволяет структурировать комментарии, лично я считаю, что для того, чтобы сделать код более понятным, нужно больше документации. Некоторое время назад в P.SE возник вопрос: может ли код быть документацией в инструментах разработчика с открытым исходным кодом? Как часто это? Конечно, это относится и к проектам с открытым исходным кодом.

Чтобы сделать код более понятным - практически более важно, чтобы существовала внешняя документация, которая помогает создать структуру обработки кода, и тогда комментарии внутри кода должны быть ограничены, чтобы их можно было увидеть.

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

Обычно комментарии составляют менее 5% кода. И на практике, в то время как сами обзоры кода привлекают гораздо меньше внимания (по сравнению с другими аспектами разработки), практически также сложно анализировать комментарии.


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

Обычно это единственный вид комментариев, которые я пишу, особенно для методов документирования того, что входит и что из этого получается (я работаю со свободно типизированными языками).
— DanMan

2

Существуют ли какие-либо новые методы, которые проверяют комментарии и автоматически обнаруживают либо «неубедительные» комментарии (например, комментарии с магическими числами, неполные предложения и т. Д.), Либо неправильные комментарии (например, обнаружение неправильно введенных переменных или тому подобное).

Существует хорошо известная методика - она ​​называется «обзор кода» и имеет сестру по имени «парное программирование». Не ожидайте ничего "автоматически" здесь.

И что еще более важно: существуют ли принятые «политики комментирования» или стратегии? Есть много советов о том, как кодировать --- но как насчет "как комментировать?"

«Код завершен» содержит не только все о том, как кодировать, но и главы о том, «как комментировать», особенно о том, как написать самодокументированный код.


+1 для завершения кода. У «Чистого кода» Роберта Мартина также есть хорошая глава по написанию полезных рекомендаций. Я не уверен в мире Java, но в мире .NET у нас есть Resharper, который может «автоматически» проверять ссылки на элементы кода в комментариях :)
— MattDavey

0

Для Java один из источников, который мне понравился, - « Как писать комментарии к документу для инструмента Javadoc» :

В этом документе описываются руководство по стилю, обозначения тегов и изображений, которые мы используем в комментариях к документации для программ Java, написанных на Java Software, Sun Microsystems.

И пункт 44: написать комментарии к документу для всех открытых элементов API :

Чтобы API можно было использовать, оно должно быть задокументировано. Традиционно документация по API создавалась вручную, и ее синхронизация с кодом была непростой задачей. Среда программирования Java облегчает эту задачу с помощью утилиты Javadoc. Javadoc генерирует документацию API автоматически из исходного кода со специально отформатированными комментариями к документации, более известными как комментарии к документам.

из эффективной Java 2-е издание .

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