Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии vs. самодокументируемый код: что выбрать?

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров920

Если вы когда-либо сталкивались с чужим кодом (или даже со своим, написанным полгода назад), то знаете, как сложно бывает понять, что именно делает тот или иной фрагмент. В такие моменты особенно остро ощущается потребность в пояснениях. Но какие есть способы, помогающие сделать код понятным?

Разберемся вместе.

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

С тех пор многое изменилось: большинство задач теперь решается с использованием языков высокого уровня. И вместе с этим возникает закономерный вопрос — действительно ли нам всё еще нужны комментарии? Или современный код может (и должен) объяснять себя сам?


Почему комментарии — не всегда добро

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

Во-первых, они устаревают. Код меняется, бизнес-логика эволюционирует, а комментарии… забываются. И вот уже в тексте говорится одно, а код делает совершенно другое.

Иногда встречается еще одна форма «устаревания» комментариев — когда они теряют связь с тем кодом, который должны пояснять. Даже если сам комментарий остается актуальным по смыслу, проблема в том, что между ним и соответствующим фрагментом кода со временем могли появиться дополнительные строки. В итоге понять, к чему относится этот комментарий, становится настоящим испытанием: приходится прокручивать в уме несколько возможных связей, чтобы уловить его первоначальный смысл.

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


Что такое самодокументируемый код

Самодокументируемый код — это стиль написания, при котором смысл заложен в самом коде, а не в сопровождающем тексте.

В чём его сила:

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

  • Мелкие, логичные методы. Сложность разбивается на части, каждая из которых выполняет одну понятную задачу.

  • Минимум сюрпризов. Читая такой код, вы чувствуете себя уверенно. Он ведет за собой, как хорошо написанная инструкция.


Когда код говорит сам за себя: несколько примеров

💬 Было:

// Вычисляем общую стоимость заказа с учетом налогов и скидок
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() говорит сам за себя. Условие скрыто — но смысл раскрыт. Такой подход не только улучшает читаемость, но и упрощает повторное использование логики.


Что говорит об этом «Чистый код»

Роберт Мартин в своей книге «Чистый код» настойчиво подчеркивает: лучший комментарий — это тот, который не нужен. Если код требует пояснений — это сигнал, что его можно улучшить.

Он призывает:

  • Извлекать методы с понятными названиями.

  • Давать осмысленные имена переменным.

  • Избегать лишних комментариев.

  • Делать код максимально прозрачным и понятным.


Но не все так однозначно

Это не значит, что комментарии должны исчезнуть навсегда. Иногда они необходимы:

  • Чтобы объяснить почему сделано именно так, а не иначе.

  • Чтобы задокументировать сторонние ограничения.

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

Но они должны быть исключением, а не правилом.


Заключение

Хороший код — как хороший текст: он читается легко, рассказывает о себе сам и не вызывает лишних вопросов. И хотя комментарии могут помочь, по-настоящему выразительный, самодокументируемый код делает их почти ненужными.

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

Скорее всего — можно.

Теги:
Хабы:
+8
Комментарии13

Публикации

Ближайшие события