Чтобы написать новый код, мы должны прочитать старый код. Таким образом, облегчение чтения на самом деле облегчает написание. — Роберт Мартин

Чистый код не содержит никаких дубликатов и хорошо выполняет одну задачу. Он предлагает один способ, а не множество, для выполнения одной задачи и, следовательно, следует принципу СУХОЙ (не повторяйтесь).

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

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

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

Функции должны быть небольшими и выполнять только одну задачу. Это означает отсутствие аргументов селектора или флага для выполнения нескольких действий.
Функции должны опускаться только на один уровень абстракции. Означает реализацию одного уровня абстракции для каждой функции.
Разделение запросов команд. Либо делайте что-то, либо что-то отвечайте.
Минимальное количество аргументов функции и никаких выходных аргументов.
Если функция должна что-то изменить, пусть она изменит состояние своего объекта-владельца.

Надлежащее использование комментариев должно компенсировать нашу неспособность выразить себя в коде.

Комментарии должны быть зарезервированы для технических заметок о коде и дизайне и не должны содержать неприемлемую информацию.
Старые, неуместные и неправильные комментарии имеют тенденцию мигрировать из кода, который они когда-то описывали. Они становятся неактуальными. Чем старше комментарий и чем дальше он от кода, который описывает, тем больше вероятность того, что он просто неверен. Это устаревшие комментарии.
Чистый код не содержит закомментированного кода. Вместо этого он удаляется. Контроль версий запоминает это. В противном случае он будет сидеть и гнить, становясь все менее и менее актуальным.
Комментарии не должны описывать то, что адекватно описывает себя. Комментарии должны говорить то, что код не может сказать сам по себе.
Вместо того, чтобы тратить время на написание комментариев, объясняющих неразбериху, потратьте его на устранение этой неразберихи.

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

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

Чистый исходный файл читается как газетная статья. Детали должны увеличиваться по мере продвижения вниз, пока в конце мы не найдем функции и детали самого низкого уровня в исходном файле. Тесно связанные строки кода кажутся плотными по вертикали.
Если одна функция вызывает другую, они расположены по вертикали близко, а вызывающая функция находится над вызываемой, если это возможно для достижения естественного перехода от высокого уровня к низкому.

Объекты и структуры данных

Скрытие реализаций — это не просто помещение слоя функций между переменными, это абстракции.
Объекты скрывают свои данные (внутреннюю структуру) за абстракциями и показывают функции, которые работают с этими данными.
Структуры данных раскрывают свои данные. (внутренняя структура) и не имеют значимых функций.

Обработка ошибок

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

Тесты

Тесты делают наш код гибким, ремонтопригодным и пригодным для повторного использования. Если у нас есть тест, мы не боимся вносить изменения в код. Без наших тестов каждое изменение является возможной ошибкой.
Количество утверждений в тесте должно быть сведено к минимуму, чтобы иметь один быстрый и понятный вывод. Чистый код проверяет одну концепцию в каждой тестовой функции.

Тесты должны быть
F — быстрыми
I — независимыми
R — воспроизводимыми в любой среде
S — самопроверяющимися (логический вывод)
T — своевременными (непосредственно перед производственный код)

Классы

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

Последовательное уточнение

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

Оставьте кодовую базу чище, чем вы ее нашли.

Это краткое изложение книги Роберта К. Мартина «Чистый код». Если вам понравилось и вы узнали из этого что-то ценное, пожалуйста, аплодисменты. Комментарии и предложения приветствуются. Продолжай учиться.

Фото ThisIsEngineering