Если вы когда-либо сталкивались с чужим кодом (или даже со своим, написанным полгода назад), то знаете, как сложно бывает понять, что именно делает тот или иной фрагмент. В такие моменты особенно остро ощущается потребность в пояснениях. Но какие есть способы, помогающие сделать код понятным?
Разберемся вместе.
Когда автор этих строк делал первые шаги в программировании, одним из основных языков был ассемблер. В те времена подробные комментарии к каждой строке считались необходимостью — не столько по привычке, сколько по объективной сложности самого языка. Понять ассемблерный код без пояснений было практически невозможно.
С тех пор многое изменилось: большинство задач теперь решается с использованием языков высокого уровня. И вместе с этим возникает закономерный вопрос — действительно ли нам всё еще нужны комментарии? Или современный код может (и должен) объяснять себя сам?
Почему комментарии — не всегда добро
Комментарии изначально задумывались как способ сделать код понятнее. Но на практике они могут обернуться ловушкой.
Во-первых, они устаревают. Код меняется, бизнес-логика эволюционирует, а комментарии… забываются. И вот уже в тексте говорится одно, а код делает совершенно другое.
Иногда встречается еще одна форма «устаревания» комментариев — когда они теряют связь с тем кодом, который должны пояснять. Даже если сам комментарий остается актуальным по смыслу, проблема в том, что между ним и соответствующим фрагментом кода со временем могли появиться дополнительные строки. В итоге понять, к чему относится этот комментарий, становится настоящим испытанием: приходится прокручивать в уме несколько возможных связей, чтобы уловить его первоначальный смысл.
Во-вторых, они часто маскируют проблему. Вместо того чтобы улучшить читаемость, разработчик просто дописывает комментарий к непонятной строке. Это сигнал: коду не хватает выразительности.
Что такое самодокументируемый код
Самодокументируемый код — это стиль написания, при котором смысл заложен в самом коде, а не в сопровождающем тексте.
В чём его сила:
-
Говорящие имена. Переменные, функции, классы называют так, чтобы их назначение было очевидно без дополнительных пояснений.
-
Мелкие, логичные методы. Сложность разбивается на части, каждая из которых выполняет одну понятную задачу.
-
Минимум сюрпризов. Читая такой код, вы чувствуете себя уверенно. Он ведет за собой, как хорошо написанная инструкция.
Когда код говорит сам за себя: несколько примеров
💬 Было:
// Вычисляем общую стоимость заказа с учетом налогов и скидок public double calculate(double price, double tax, double discount) { return price + (price * tax) - discount; }
🧾 Стало:
public double calculateTotalOrderPrice(double price, double taxRate, double discountAmount) { return price + (price * taxRate) - discountAmount; }
Комментарий исчез — но смысла стало даже больше. Имя метода и параметры делают всё понятным с первого взгляда.
Еще пример:
💬 Было:
# Проверяем, является ли число чётным if number % 2 == 0: print("Четное")
🧾 Стало:
def is_even(number): return number % 2 == 0 if is_even(number): print("Четное")
Появилась функция с хорошим именем — и вот уже комментарий не нужен. Понимание приходит сразу.
А как быть со сложной логикой?
Самодокументируемый код особенно хорош, когда дело доходит до предикатов.
💬 Было:
// Проверяем, если пользователь не заблокирован и подписка активна if (!user.isBlocked && user.subscription.isActive) { sendNewsletter(); }
🧾 Стало:
if (user.canReceiveNewsletter()) { sendNewsletter(); }
Метод canReceiveNewsletter() говорит сам за себя. Условие скрыто — но смысл раскрыт. Такой подход не только улучшает читаемость, но и упрощает повторное использование логики.
Что говорит об этом «Чистый код»
Роберт Мартин в своей книге «Чистый код» настойчиво подчеркивает: лучший комментарий — это тот, который не нужен. Если код требует пояснений — это сигнал, что его можно улучшить.
Он призывает:
-
Извлекать методы с понятными названиями.
-
Давать осмысленные имена переменным.
-
Избегать лишних комментариев.
-
Делать код максимально прозрачным и понятным.
Но не все так однозначно
Это не значит, что комментарии должны исчезнуть навсегда. Иногда они необходимы:
-
Чтобы объяснить почему сделано именно так, а не иначе.
-
Чтобы задокументировать сторонние ограничения.
-
Чтобы указать на временные решения или технический долг.
Но они должны быть исключением, а не правилом.
Заключение
Хороший код — как хороший текст: он читается легко, рассказывает о себе сам и не вызывает лишних вопросов. И хотя комментарии могут помочь, по-настоящему выразительный, самодокументируемый код делает их почти ненужными.
Следующий раз, когда потянетесь к //, спросите себя: а можно ли сделать код настолько понятным, чтобы он сам за себя говорил?
Скорее всего — можно.
ссылка на оригинал статьи https://habr.com/ru/articles/929600/
Добавить комментарий