Нужны ли комментарии в коде?

«Нужны ли комментарии в коде?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Да, но только «правильные» комментарии. Цель комментария — объяснить «почему» и «зачем», а не «что» делает код (это должно быть понятно из имён переменных, функций и структуры).

Хорошие комментарии (рекомендуется):

  • Объяснение сложной бизнес-логики или алгоритма.
  • Причина неочевидного решения (например, обход известной ошибки в библиотеке).
  • TODO / FIXME — отметки для будущих улучшений.
  • Javadoc / KDOC / и т.п. — документация публичного API.

Плохие комментарии (избегать):

  • Дублирование кода: x = 5; // присваиваем 5 переменной x
  • Устаревшие: комментарии, не соответствующие текущей логике.
  • Излишне эмоциональные или неформальные.

Пример:

// ПЛОХО: комментарий избыточен
int delay = 3000; // задержка в 3 секунды

// ХОРОШО: комментарий объясняет причину выбора значения
// Таймаут установлен в 3 сек, согласно SLA сервиса X (отвечает за 99% запросов)
int requestTimeoutMs = 3000;

// ХОРОШО: комментарий объясняет неочевидную оптимизацию
// Используем IdentityHashMap, т.к. нам важно сравнение по ссылкам (==),
// а не по значению (.equals()), для учёта циклических зависимостей.
Map<Node, List<Node>> adjacencyMap = new IdentityHashMap<>();

Пишите самодокументирующийся код, а комментариями поясняйте только нетривиальные решения.