Как рефакторить код, чтобы на утро не болела голова.
Меня зовут Саша Беспоясов, я работаю консультантом в 0+X.
Пишу код больше 10 лет. Веду
технический блог, пишу о
разработке.
Сегодня я расскажу о том, как эффективно рефакторить код и какие из программистских базвордов для этого понадобятся.
Рефакторинг — изменение внутренней структуры программы, не затрагивающее её внешнего поведения для упрощения понимания её работы.
Рефакторинг требует усилий, но взамен мы получаем:
Характеристики субъективны, их сложно измерить напрямую. Но все они отсылают к тому, «насколько код читаем».
...Если постараться, то измерить характеристики, конечно, можно, но об этом позже 🤫Когнитивные костыли, которые говорят, как узнать «плохой» код.
Иногда достаточно посмотреть на список запахов, найти подходящий и использовать рецепт против него.
return
.Изучите историю коммитов. В ней я показал, как применять разные техники и использовать словечки™, чтобы находить проблемные места.
Как минимум помогут найти «мёртвый» код и неиспользуемые переменные.
Если информация доступна из близкого контекста, её можно опустить. Но лучше с этим быть аккуратнее.
Но с ней проще справляться.
Фокусируйтесь на преобразованиях данных. Считайте их состояния результатами бизнес-событий.
return
.Null
-объекты и Option
-типы.Выносите повторяющиеся условия в переменные.
Закономерности упрощайте правилами булевой логики.
!(a && b) === !a || !b
!(a || b) === !a && !b
return
Чистые функции — это отличный пример абстракции. Если вызов функции можно заменить её результатом, то мы можем «абстрагировать» её детали реализации.
Result
-контейнеры.Почипо, потому что:
Почипо помогает собрать код бизнес-правил в центре, а побочные эффекты — по краям.
Системы типов помогут подсветить проблемы с инкапсуляцией, невалидными состояниями данных и нарушением CQS.
Result
-контейнерыКомпонент, в котором намешано всё на свете сложно понимать, тестировать и изменять.
Рассказывайте что код должен делать, а не как.