Что такое рефакторинг кода и зачем он нужен
![]()
Вы можете написать программу любым удобным способом так, чтобы она работала. Но в любом случае придется привести исходный код в порядок, то есть провести рефакторинг.
Зачем же нужна эта процедура если она не вносит коррективы в приложение и не меняет его функционал? В этой статье мы как раз и поговорим на эту тему.
Зачем нужен рефакторинг
Начнём с того, что же такое рефакторинг (refactoring). Это процедура, которая предполагает переработку исходного кода программы так, чтобы он стал более простым и понятным. При этом новые функции не добавляются, а старые — сохраняются.
Дело в том, что разработчики в процессе своей работы, как правило, спешат, добавляют новые функции или исправляют существующие баги. Всё это приводит к тому что код становится беспорядочным и непонятным. А чтобы он имел более адекватный вид рекомендуется проводить рефакторинг.
В целом эта процедура направлена:
- на сохранение архитектуры проекта, без потери структурированности;
- на упрощение жизни разработчиков, делая код прозрачным и понятным для всех членов команды;
- на ускорение процесса поиска ошибок.
Также стоит понимать, что язык программирования совершенствуется: появляются новые функции, библиотеки, то есть, то что делает код проще и понятнее. Даже идеальная программа, написанная год/два назад, со временем требует нового рефакторинга. Задача процесса — обновить участки устаревшего кода.
Другими словами можно сказать, что refactoring – приведение в порядок рабочего места. Это грубый пример, но для всех понятный.
Чем рефакторинг отличается от оптимизации
Часто рефакторинг путают с оптимизацией, так как эти два процесса, чаще всего, проводят одновременно. Но на самом деле это два разных понятия, имеющий разные цели:
- оптимизация – улучшает производительность программы;
- рефакторинг – улучшает понятность кода.
Кстати, после оптимизации исходный код усложняется и поэтому после него и рекомендуют провести чистку кода.
Что не является рефакторингом?
Многие считают, что рефакторинг это:
- переписывание кода;
- улучшение функциональной составляющей ПО;
- оптимизация;
- дебаггинг.
Говоря о первом пункте то он имеет смысл при создании нового программного обеспечения.
Второй предполагает улучшение ПО с точки зрения пользователя, а не с точки зрения разработчика.
Оптимизация предполагает улучшение производительности программы, при этом код может стать ещё сложнее. Как правило, оптимизацию и refactoring проводят параллельно.
И напоследок, четвертый пункт – поиск ошибок и их устранение, при этом код может стать как проще, так и сложнее. Суть и цель дебаггинга – заставить ПО работать корректно.
Все эти пункты не являются рефакторингом и зачастую каждый выполняется отдельно.
Как делают рефакторинг
Рефакторинг выполняется последовательно, шажок за шажком. Безусловно, чистить можно все. Однако в первую очередь, рекомендуется найти следующие проблемы:
- Мертвый код — параметр, переменная, метод или класс, который больше не используется. Такие участки необходимо удалить.
- Дублирование – один и тот же код выполняет одно и то же действие в нескольких местах программы.
- Имена классов, функций, переменных не передают их значение.
- Слишком длинные функции, методы, классы и списки параметров функций. Если их длина выходит за оптимальное значение, необходимо разбить их на маленькие составляющие.
- Большое количество комментариев, которые загромождают программу.
Как правило, код чистят на этапе тестирования, когда все уже готово и проверяется работоспособность программы.
Когда вы подчищаете одну часть кода, обратите внимание на соседние участки, может они тоже требуют улучшения. Но при этом важно помнить, что в этом деле стремление к совершенству ни к чему. То есть перетряхивать всю программу в поисках того, что можно почистить – смахивает на фанатизм.
Когда нужно срочно улучшать код
Существует некий список признаков, который указывает на то, что коду нужен срочный рефакторинг. Рассмотрим эти признаки подробнее.
Замусориватели
Сюда входят те участки кода, удалив которые функционал программы не будет задет:
- дубли;
- мертвый код;
- изобилия комментариев;
- ленивые классы (участки, которые выполняют маловажные задачи);
- классы данных (содержат в себе поля и наиболее примитивные методы).
Если регулярно подчищать код от замусоривателей,то он будет более понятен как самому автору, так и другим участникам команды.
Раздувальщики
Данная категория состоит из элементов кода, которые в процессе разработки ПО увеличились до таких размеров, что корректно с ними работать не представляется возможным. Например:
- использование элементарных составляющих вместо маленьких объектов;
- большой класс, содержащий много методов строк кода и полей;
- длинный метод, состоящий из 10 строк и более;
- дубли с одинаковыми переменными в различных частях кода;
- длинные списки параметров
Важно следить за данной категорией, так как она проявляется не сразу, а в процессе эволюции приложения.
Нарушители ООП
ООП — обьектно-ориентированное программирование. Если разработчик неправильно использует его возможности, то могут возникнуть следующие проблемы:
- наличие полей, которые не содержат данные;
- использование в коде оператора “switch” и последовательность из нескольких “if”;
- несколько классов, которые выполняют аналогичные функции, но при этом наделены разными методами.
Утяжелители изменений
Сюда входят проблемы, которые невозможно изменить, не поправив при этом другие участки кода. Например:
- Параллельное наследование Создание подкласса для одного класса, которое требует выполнения аналогичной операции со связанным классом.
- Стрельба дробью. Модификации кода, которые заставляют разработчика редактировать большую часть классов.
- Расходящиеся модификации. Редактирование класса невозможно без изменения разных методов.
Другие признаки
Также есть и другие ситуации, когда рефакторинг необходим:
- один класс, оперирует методами и служебными полями другого (неуместная близость);
- класс выполняет одно действие — передает работу другому классу;
- метод обращается к данным, относящимся к другому объекту гораздо чаще, чем к своим.
Методики рефакторинга
Методов проведения рефакторинга также много, как и поводов для его проведения. Основная задача — провести ревизию программы, определить проблемную зону и устранить ее. Все просто. Рассмотрим три основных метода.
Составление методов
Основная задача — уменьшить длину методов, устранить дубли кода, облегчив работу с ним. В первую очередь необходимо провести работу с переменными:
- Расщепление — использование разных переменных для различных данных, где каждый контейнер отвечает за конкретное задание.
- Извлечение. Если в коде есть сложное выражение, то необходимо его результат поместить в отдельные переменные.
Организация данных
Суть состоит в замене примитивных типов на классы с большей функциональностью. Имеются следующие методы:
- Значение вместо ссылки. Если имеются большое количество одинаковых частей кода, которые относятся к одному классу, их заменяют единым обьектом-ссылкой.
- Замена связей. Если нужно использовать возможности двух классов, то добавляется недостающая связь классов.
- Самоинкапсуляция поля. Этот процесс предполагает формирование сеттер и геттер для поля.
Упрощение условий
Рефакторинг направлен на минимизацию условных операторов в коде.
Варианты:
- заменить флаг для булевских выражений функциями «break», «continue» и «return»;
- разбить сложный оператор на части при помощи функций «then» и «else»;
- объединение одинаковых условия, которые приводят к единому результату.
В чём опасности рефакторинга
Как не крути, менять код — это опасно, ведь даже мелкие изменения могут сломать приложение. Поэтому важно после каждого изменения тестить программу. Некоторые горе-программисты переписывают целые классы, а потом не могут включить ПО.
А чтобы избежать это, можно воспользоваться следующими рекомендациям от разработчиков:
- Проводить рефакторинг регулярно, но по чуть-чуть.
- Не делать из рефакторинга церемонию, то есть не нужно оставлять важные задачи по проработке ПО (например, внедрение нового функционала).
- Не пренебрегайте рефакторингом, даже если вы работаете над этим проектом самостоятельно.
Вопросы и ответы
Какие выгоды рефакторинга приносит как разработчикам, так и проектам?
Рефакторинг имеет следующие преимущества: улучшение качества кода, увеличение сопровождаемости и расширяемости проекта, снижение затрат на обслуживание и устранение багов в будущем.
Как часто следует проводить рефакторинг кода?
Рефакторинг кода – это непрерывный процесс, и его частота может зависеть от конкретных требований проекта и его состояния. Однако регулярный рефакторинг, проводимый внутри разработки новых функций или исправления багов, может помочь поддерживать высокое качество кода.







