Короткий, лучший и правильный ответ
Идея, что хорошо написанный «самодокументированный код» - это все, что вам нужно, это анти-паттерн, и он должен умереть, даже если он делает исключения для комментариев, объясняющих «почему». Это миф, что вы всегда можете написать весь код для любого алгоритма, достаточно ясного для любого программиста, чтобы взглянуть на него и получить его (или что это не потребует рефакторинга или организационного времени, которого у вас нет). Что еще более важно, чаще всего программисты, которые думают, что пишут понятный код, не делают этого.
Гораздо лучший ответ, чем комментарии, следует использовать только для объяснения «почему» : комментарии должны:
- объясните "почему" (конечно)
- объяснять «что» в отдельных строках только тогда, когда код сложен или цель неясна, и это не может быть или не стоит упрощать дальше
- объяснить «что» для блоков кода, чтобы ускорить понимание и найти то, что вам нужно
Объяснение, чтобы поддержать это
Люди ошибочно думают, что единственная причина, по которой люди используют комментарии, - это объяснить, что означает строка кода. Правда, большая цель комментирования кода состоит в том, чтобы сделать его быстреепросмотреть ваш код и найти то, что вы ищете. Когда я вернусь к коду позже или прочитаю чужой код, конечно, я смогу прочесть и понять раздел хорошо написанного кода, но разве не быстрее и проще прочесть комментарий вверху, говорящий о том, что делает этот раздел кода, и пропустить это вообще, если это не то, что я ищу? Зачем сидеть там и разбираться в коде вообще, даже если он хорошо написан, если вы можете взглянуть на пару комментариев и понять всю функцию? Вот почему мы используем описательные имена для функций - никто не говорит, что мне не нужно использовать описательное имя для моей функции, потому что кто-то может просто просмотреть мой чисто написанный код, чтобы увидеть, что он делает.
Например, если я просматриваю чужую функцию, проще ли проходить строку за строкой в коде, чтобы увидеть, что он делает, или взглянуть на три хорошо написанных комментария по всей функции, чтобы увидеть, что именно делает функция и где это делает это?
Еще один анти-шаблон - это чрезмерное использование функций для комментирования вашего кода. Хорошо названные функции являются важной частью документации кода, но иногда программисты разделяют 2-3 строки кода, которые никогда не будут использоваться где-либо еще в функции для целей документации. Почему злоупотребление функциями лучше, чем злоупотребление комментариями? Использование таких функций - то же самое, что использование операторов GOTO - это создает код спагетти, который может быть болезненным для подражания.
По сути, когда вы работаете в корпоративной среде, где люди постоянно обмениваются кодом, а у людей не всегда есть время, чтобы усовершенствовать свой код, несколько хороших комментариев могут сэкономить массу времени и разочарований. И помните, хотя вы можете быть гуру, который может читать код со скоростью света, возможно, не все в вашем офисе.