Чистый код и рефакторинг.

Программист — художник, его код — картины.

Nikita Goncharuk
Clean Code

--

Вероятно, сколько существует программистов, столько найдется и определений. Вот что сказал однажды Бьёрн Страуструп, создатель C++ и автор книги «The C++ Programming Language» по поводу чистоты кода:

Я люблю, чтобы мой код был элегантным и эффективным. Логика должна быть достаточно прямолинейной, чтобы ошибкам было трудно спрятаться; зависимости — минимальными, чтобы упростить сопровождение; обработка ошибок — полной в соответствии с выработанной стратегией; а производительность — близкой к оптимальной, чтобы не искушать людей загрязнять код беспринципными оптимизациями. Чистый код хорошо решает одну задачу.

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

❶ Чистый код очевиден для других программистов.

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

Прагматичные Дэйв Томас (Dave Thomas) и Энди Хант (Andy Hunt) поделились своим очень любопытным мнением. Они сравнили плохой код с разбитыми окнами. Здание с разбитыми окнами выглядит так, словно никому до него нет дела. Поэтому люди тоже перестают обращать на него внимание. Они равнодушно смотрят, как на доме появляются новые разбитые окна, а со временем начинают сами бить их. Они уродуют фасад дома надписями и устраивают мусорную свалку. Одно разбитое окно стало началом процесса разложения.

❷ Чистый код проходит все тесты.

Дэйв связывает чистоту с тестами! Десять лет назад это вызвало бы множество недоуменных взглядов. Однако методология разработки через тестирование оказала огромное влияние на нашу отрасль и стала одной из самых фундаментальных дисциплин. Дэйв прав. Код без тестов не может быть назван чистым,каким бы элегантным он ни был и как бы хорошо он ни читался. Если программа проходит только 95% тестов, значит где-то у вас завелся грязный код. Если у вас вообще нет тестов, вы не проходите этот пункт автоматически.

Пока величайшие умы задумались над критериями чистого кода, Майкл Физерс , автор книги «Working Effectively with Legacy Code», срубил с плеча:

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

➌ Чистый код содержит минимум классов и других движущихся частей.

Чем меньше кода, тем меньше его нужно держать в голове. Чем меньше кода, тем меньше вероятность его сломать.

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

Рон Джеффрис , автор книг «Extreme Programming Installed» и «Extreme Programming Adventures in C#», с огромным опытом программирования, начавший свою карьеру с Fortran, из всех правил уделял особое внимание дублированию:

Если что-то делается в программе снова и снова, это свидетельствует о том, что какая-то мысленная концепция не нашла представления в коде. Я пытаюсь понять, что это такое, а затем пытаюсь выразить идею более четко. Выразительность для меня прежде всего означает содержательность имен. Обычно я провожу переименования по несколько раз, пока не остановлюсь на окончательном варианте. Я также смотрю, не выполняет ли объект или метод более одной операции. Если это объект, то его, вероятно, стоит разбить на два и более объекта. Если это метод, я всегда применяю к нему прием «извлечения метода»; в итоге у меня остается основной метод, который более четко объясняет, что он делает, и несколько подметодов, объясняющих, как он это делает.

➍ Чистый код не содержит дублирования.

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

Уорд Каннингем, создатель Wiki, создатель Fit ,один из создателей экстремального программирования, имеет свое мнение насчёт прекрасного:

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

➎ Чистый код легче и дешевле поддерживать!

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

Чистый код достижим, но стремление к нему бесконечно.

--

--