Лучшие комментарии — это те, которые мы не пишем

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

⚠️ Читайте больше моих статей о технике и бизнесе в моем личном блоге! ⚠️

Самостоятельное документирование кода

То, что я узнал из своего опыта и прочитанного, можно подытожить названием этого поста.

Лучшие комментарии — это те, которые мы не пишем.

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

Сравните это

function main() {
  let imageName = 'test.png'

  // Get the extension off the image filename  
  let pieces = imageName.split('.')
  let extension = pieces.pop()
}

Войти в полноэкранный режим Выход из полноэкранного режима

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

Но это выглядит как оправдание: «Мой код уродлив/сложен, но он не так уж плох, я объясню это в комментарии» вместо того, чтобы очистить его.

function main() {
  let imageName = 'test.png'
  let extension = getFileExtension(imageName)
}

Вход в полноэкранный режим Выход из полноэкранного режима

Имя функции уже должно отвечать на вопрос, что делает та или иная часть кода. Почему бы не использовать эту возможность?

Слишком большое количество комментариев душит код

Как было сказано выше, в моем текущем проекте мы должны документировать все. Все должно быть закомментировано с помощью jsdoc.

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

/**
 * Get the extension of the file
 * 
 * @param {string} filename - The filename
 * @return {string} the extension of the file  
 */
function getFileExtension(filename) {
  let pieces = imageName.split('.')
  return pieces.pop()
}

Вход в полноэкранный режим Выход из полноэкранного режима

Скажите, что в этом комментарии есть информация, которую вы не поняли, читая код? Ее нет.

Наоборот, то, что функция возвращает расширение файла, повторяется трижды: один раз в названии функции, один раз в ее описании и один раз в теге @return.

Какова дополнительная ценность этого комментария? Никакой.

Когда вы постоянно видите бесполезные комментарии, ваш мозг учится их игнорировать. Вы, вероятно, уже сталкивались с этим: в проекте, где много комментариев и большинство из них похожи на те, что мы видели выше, в итоге вы перестаете видеть и читать комментарии.

К сожалению, несколько интересных комментариев теряются в море бесполезных и оказываются не такими полезными, как хотелось бы.

Покрытие кода документацией

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

И как для юнит-тестов, вы быстро поддадитесь искушению достичь 100% покрытия.

И что касается модульных тестов, я не уверен, что это то, что стоит делать. Для модульных тестов высокое покрытие ненадежно и не является доказательством качества; для документации высокий процент покрытия контрпродуктивен и душит код.

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

Там, где код чист, комментарий будет бесполезен, и ваш мозг вскоре его проигнорирует. Там, где код грязный, разработчик будет использовать комментарий как оправдание для того, чтобы не обновлять свой код.

Я пишу меньше комментариев

… и это не плохо. Код легче читать. Это заставляет меня делать мой код как можно более понятным: таким образом, код становится чище. Читатели будут обращать больше внимания на те немногие комментарии, которые я пишу.

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


Чтобы копнуть глубже, вот более свежий пост, который глубже объясняет концепцию/идею, представленную здесь. Она написана после отзывов и вопросов читателей:

  • La documentation sera toujours utile

Оцените статью
devanswers.ru
Добавить комментарий