Эта статья – краткий обзор первой половины книги Чистый код.

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

Для самых нетерпеливых

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

  • Думайте над именами

  • Не делайте код слишком чистым

  • Следуйте стандартам языка или вашей команды

  • Программист не должен заниматься форматированием

Чистый vs грязный код

Чистый код легко читается, изменятся и поддерживается. Это тот код, с которым легко работать и вносить новый функционал.

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

Принципы

Призваны помочь борьбе с грязным кодом, делая жизнь программистов легче.

Названия

Обычная ситуация
Обычная ситуация

Исчерпывающие названия

Для того чтобы выбрать название, задайте себе вопрос: “что делает эта функция?” или “что обозначает эта переменная?”. Если вы не можете ответить на вопрос – займитесь рефакторингом.

Самое сложная вещь в программировании – это нейминг.

Поэтому стоит подумать хотя бы минуту, прежде чем давать имя чему-либо.

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

Дополнение контекстом

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

Кодировка признаков

Кодирование признаков в именах бесполезно – IDE и так даёт всю нужную информацию о переменной. Также, оно ухудшает удобочитаемость кода и затрудняет автодополнение при вводе.

Одна концепция – одно имя

Каждая концепция должна обозначаться одним и тем же словом – иначе придётся разбираться чем одно отличается от другого.

Функции

Функции – как хорошие шутки: короткие и по делу.

– DeepSeek

Функции выступают основными строительными блоками программы. Поэтому, важно писать их так, чтобы было понятно, что происходит в коде.

Одно действие

Функция должна выполнять только одну операцию. Она должна выполнять её хорошо, и ничего другого она делать не должна.

– Роберт Мартин

Если название функции намекает на то, что она выполняет несколько действий, разбейте её тело на две новые функции. Таким образом, теперь она выполняет только одну задачу – объединение двух новых функций.

Компактность

Первое правило: функции должны быть компактными. Второе правило: функции должны быть еще компактнее.

– Роберт Мартин

Чем компактнее функция, тем лучше. Но как и с любой вещью важно не переусердствовать – если функция легко читается, то зачем её разделять?

Аргументы

Чем меньше аргументов, тем лучше. Три или четыре – уже много. Для уменьшения их количества можно объединять в структуры, разделяя по группам.

Форматирование

Программист не должен заниматься форматированием.

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

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

Стандарты

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

Просто следуйте им. Это снизит когнитивную нагрузку на мозг в спорных ситуациях, так как можно сделать так, как прописано в стандарте.

Две шапки

Классика
Классика

Одна для написания кода, а другая для рефакторинга.

Первая

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

Вторая

Приводите написанный код в читаемое состояние. Если вдруг стало нужно написать какой-то функционал – меняйте шапку.

Комментарии

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

Не комментируйте то, что и так очевидно. Это не принесёт пользу, а наоборот навредит читаемости.

Удаляйте комментарии, которые перестали быть актуальными после изменений кода, так как они описывают уже не тот функционал, который был раньше.

Чрезмерный перфекционизм – плохо

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

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

Конец

Надеюсь, статья была полезной. Другие мои статьи можно найти в моём блоге или прямо тут на Хабре.

Комментарии (7)


  1. ThisMan
    15.02.2025 09:21

    Без примеров "как надо" и "как не надо" статья не особо имеет смысла, так как все слишком абстрактно и многие поймут по своему. Пора уже привыкнуть к этому


  1. Sneedmanc
    15.02.2025 09:21

    Самая тупая вещь в этом аутизме с "лучшими практиками" - это дублирование строк в енумы с тем же самым именем, что и строка. Противоречит принципу неповторения, выглядит абсурдно и по факту не нужно, любая полноценная IDE способна вывести диапазон допустимых значений из типов, так что оправдание с "опечатку заметит" не катит.


  1. Lewigh
    15.02.2025 09:21

    Кодировка признаков

    Кодирование признаков в именах бесполезно – IDE и так даёт всю нужную информацию о переменной. 

    Каких еще признаков? Признаков того что это очередная статья написанная ИИ?


    1. amatoravg
      15.02.2025 09:21

      Наверное автор имел в виду тип... Что-то вроде str_var или somedata_list...


  1. Walki_51146
    15.02.2025 09:21

    В принципе, правила база и отрицать их нельзя. Но специфика статьи в том, что тема нужна, как правило тем, кто только учится... Как сказано выше, какой смысл в словах, без какого либо яркого примера, маломальская функции калькулятора правильно/неправильно. Голова у всех работает по разному и условный нейминг функций каждый поймет по своему, у кого-то ItIsFunctionThatDoAAddB будет правильным, так как функция, как сказано из статьи, наглядно показывает что она делает.


    1. georgiyozhegov Автор
      15.02.2025 09:21

      Постараюсь отредактировать статью, как раз сомневался с тем, нужны примеры или нет


  1. HemulGM
    15.02.2025 09:21

    Думал, речь про soap