Один из популярных вопросов на собеседованиях – что такое «чистый код»? Понимание этого выражения очень важно для каждого программиста. Вот и для себя я решил сформировать это определение.

За основу я взял книгу Роберта Мартина “Чистый код”, в которой невероятно качественно и с пристрастием описано насколько важно писать чистый код и стараться поддерживать его качество. Всем рекомендую прочитать ее.

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

Если вы занимаетесь программированием 2-3 года или больше, то, скорее всего, приходилось работать с чужим кодом, или даже со своим, который был написан когда-то давно и превратился в полный беспорядок. Такая работа очень замедляет процессы разработки. Каждое новое изминение нарушает работу кода в двух-трех других местах. Ни одно изменение не может пройти тривиально, для каждой смены или модификации кода нужно понимать всю структуру системы. Вместо того чтобы отрефакторить код или изменить архитектуру, мы переносим это на потом, в надежде что когда-то это перепишем. К сожалению мы не знаем, что по закону Леблана: потом равносильно никогда.

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

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

  • Чистый код читается как замечательно написана проза. Он никогда не содержит скрытых намерений разработчика и содержит четкие абстракции и простые линии передачи управления. Читается как произведение – строка за строкой. Все переменные и названия функций (классов, методов) имеют четкие названия, которые точно описывают что они делают и за что отвечают.
  • Из предыдущего следует, что код должен быть самодокументированным. Из названия метода должно быть понятно, что он делает. Нужно избегать любой умственных преобразований.
  • Чистый код обязательно должен содержать Unit тесты. Ведь код который хорошо читается и который легко модифицируется – это не одно и то же. Более о важности тестов можно прочитать в статье Unit tests – начало. Код без тестов не может быть назван чистым, каким бы элегантным он не был бы и как хорошо бы не читался.
  • Чистый код должен выполнять одну задачу. Каждая функция должна выполнять только одно задание, которое четко формируется в ее названии. Класс должен содержать только те поля и методы которые нужны только для него. Все лишнее нужно выносить в отдельные сущности.
  • Код должен содержать полную обработку ошибок. Это одно из проявление внимания к мелочам.
  • Чистый код выглядит так, как будто автор над ним упорно трудился. В нем трудно найти очевидные возможности для улучшения. Они все уже были продуманы автором.
  • Код не должен содержать дубликаты. Если часть кода повторяется снова и снова – это свидетельствует, что какая-то мысленная концепция не нашла выражение в коде.
  • Код должен быть написан в одном стиле. Нужно создать Code Convention и придерживаться его. Это особенно важно, если над ним работает команда. Нужно настроить статический анализ кода. Эта тема уже была описана ранее в статье Статический анализ JavaScript кода.
  • Минимум комментариев в коде. Он должен быть сомодокументованным, ведь комментарии не компенсируют плохой код. Комментарии имеют свойство врать, особенно это видно когда код был переписан, а комментарии нет.

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

За кодом нужно следить, ведь он может очень много рассказать о его авторе.

Схожі статті