Комментарии

Комментарии в программировании – это специальные заметки или объяснения, которые добавляются к коду программистом, чтобы улучшить читаемость написанного. Комментарии никак не влияют на алгоритм программы – она их игнорирует. Они созданы исключительно для чтения человеком. В Java существуют три основных типа комментариев: однострочные, многострочные и документирующие комментарии (javadoc). Но давайте поговорим не только о том, как их писать, но и о том, почему комментарии могут быть злом, и как их использование связано с качеством кода.

Почему комментарии это зло

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

Лучше всего использовать только документирующие комментарии в своём коде. И то – с умом, чтобы они не повторяли очевидное. Да, бывают исключения. Но они редки. Крайне редки. Они случаются гораздо реже, чем среднестатистический программист пишет комментарий, который причисляется ко злу.

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

Однострочные комментарии

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

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

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

Посмотрите: это же прекрасно. Никакие пояснения не нужны. А если попытаться втиснуть сюда тот комментарий, он будет избыточным – он просто будет переводить на русский язык название метода, которое и так говорит за себя.

Многострочные комментарии

Многострочные комментарии начинаются с /* и заканчиваются на */. Каждая строка блочных комментариев (кроме самой первой) должна по-хорошему начинаться со звёздочки. Они могут содержать несколько строк текста и обычно используются для описания более крупных блоков кода. Пример:

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

Это некрасиво. Это неэлегантно. Это моветон! Как это можно исправить? Можно вынести значения 0, 1 и 2 в именованные константы.

Видите, как преобразился метод? Но он всё ещё слишком нагромождённый. Методы лучше писать как можно короче. Не то, что меньше одного экрана – методы должны быть гораздо, гораздо меньше. Тогда они будут удобными, легко читаемыми и чистыми. И хотя комментарий мы уже спокойно убрали без потери читаемости кода, душа поэта не позволит оставить этот код таким грязным. Вынесем операции по получению текущей даты и времени в отдельные методы:

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

Javadoc-комментарии

Документирующие комментарии используются для автоматической генерации документации к коду. Это полезно, однако я редко (почти никогда) не генерирую такие документы. Наоборот, я использую документирующие комментарии для того, чтобы пояснить свои намерения относительно класса или метода, если такое пояснение требуется.

Документирующие комментарии в Java называются javadoc. Они начинаются с /** и обычно располагаются перед классами, методами и иногда полями. У javadoc-комментариев также есть специальные “теги“, начинающиеся с @, которые позволяют более явно указать смысл параметров или возвращаемого значения, если это, к примеру, метод. Как это выглядит в коде:

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

Это какой-то страх. Разве имя метода calcFibonacciNumberByIndex() не объясняет, что будет вестись подсчёт числа Фибоначчи по заданному индексу (порядковому номеру)? Мало того, что это повторяется в javadoc-коментарии сразу, так ещё и в тегах @param и @return. Это не дело. Но ещё больше не дело – это вставлять исторические сводки, описания алгоритмов, целые эссе в javadoc-и:

Никогда так не делайте. Помните: краткость – сестра таланта. Чем больше программист тратит времени на чтение бесполезных комментариев, тем меньше он реально занимается разработкой. Не нужно забивать голову кроликами. Подумайте о методах!

Как же стоило поступить в этом конкретном случае? Да убрать javadoc в принципе! Этот метод не требует пояснений. Его название сообщает всё необходимое. Объём метода небольшой. Так зачем его пояснять в javadoc-е?

В заключение, комментарии задумывались как инструмент для улучшения понимания кода, но их следует использовать с умом. Лучше всего создавать чистый и самообъясняющийся код, который не требует избыточных пояснений, а из трёх типов комментариев использовать только один – документирующий (для Java это javadoc). Помните, что хороший код говорит сам за себя, и умение писать такой код – важный навык для каждого программиста.

Добавить комментарий