# Что такое рефакторинг и как делать его без поломок

> Что такое рефакторинг простыми словами: изменение устройства кода без изменения поведения. Чем он не является, зачем окупается и как делать его безопасно.

Published: 2025-10-23 · Source: https://subxcat.com/ru/articles/what-is-refactoring · Author: SUBXCAT

Рефакторинг — это изменение устройства кода без изменения того, что код делает. Пользователь не должен заметить никакой разницы: те же экраны, те же кнопки, тот же результат. Меняется только то, как всё устроено внутри.

Если коротко ответить на вопрос «что такое рефакторинг», это уборка в мастерской. Инструменты те же, станки те же, но теперь понятно, где что лежит, и следующая работа идёт быстрее.

## Чем рефакторинг не является

Слово часто используют для всего подряд, и из-за этого его боятся. Вот что рефакторингом не считается.

- **Переписывание с нуля.** Рефакторинг идёт маленькими шагами по работающему коду, а не заменяет его новым.
- **Добавление функций.** Если после изменения приложение умеет что-то новое, это разработка, а не рефакторинг.
- **Исправление ошибок.** Найти баг во время рефакторинга — обычное дело, но чинить его лучше отдельным шагом. Иначе непонятно, что изменило поведение: исправление или случайная поломка.
- **Смена дизайна.** Перекрасить кнопки — это работа над интерфейсом. Рефакторинг интерфейса может разбить огромный компонент на части, но выглядеть всё должно так же.

Главный критерий простой: поведение до и после одинаковое. Если ты не можешь это проверить, ты не рефакторишь, а надеешься.

## Как выглядит рефакторинг на практике

Типичные шаги, особенно в коде, написанном с ИИ:

- **Убрать дубли.** Одна и та же функция расчёта цены скопирована в три файла, и в одном из них уже исправлена ошибка, а в двух других нет. Оставляешь одну версию, остальные места вызывают её.
- **Разбить огромный файл.** Компонент на полторы тысячи строк, где и загрузка данных, и форма, и таблица, и модальные окна, делится на несколько понятных частей.
- **Дать имена.** `data2`, `handleClick3` и `temp` превращаются в `unpaidInvoices` и `submitPayment`. Число `86400` в коде получает имя `SECONDS_IN_DAY`.
- **Убрать мёртвый код.** Функции, которые никто не вызывает, и закомментированные куски, оставшиеся от прошлых попыток.
- **Развести слои.** Запросы к базе, бизнес-правила и отрисовка, перемешанные в одном месте, разносятся по своим.

## Зачем это нужно и почему окупается

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

В запутанном коде каждая новая функция стоит дороже предыдущей: нужно найти все места, где что-то задето, и надеяться, что не пропустил. В аккуратном коде изменение делается в одном месте и ломает меньше.

С ИИ-ассистентами это работает ещё заметнее. Модель видит ограниченный кусок проекта. Если логика размазана по десяти файлам с похожими именами, ассистент правит одну копию и не трогает остальные. В маленьких файлах с понятными именами он ошибается реже и быстрее находит, что менять.

## Как делать рефакторинг безопасно

1. **Сначала зафиксируй поведение.** Лучше всего — автотестами на то, что трогаешь. Если тестов нет, запиши руками несколько сценариев проверки: войти, создать заказ, оплатить, отменить.
2. **Сохрани точку возврата.** Закоммить рабочее состояние в git до начала. Если что-то пойдёт не так, ты вернёшься за секунды.
3. **Маленькие шаги.** Один шаг — одно изменение: переименовал, проверил, закоммитил. Вынес функцию, проверил, закоммитил. Большой рефакторинг за один заход почти всегда заканчивается фразой «где-то что-то сломалось».
4. **Не смешивай с новыми функциями.** Сначала приведи код в порядок, потом добавляй. Или наоборот, но не одновременно.
5. **Ставь ИИ жёсткие рамки.** Проси конкретно: «вынеси расчёт цены в отдельную функцию, поведение не меняй, ничего другого не трогай». Потом читай дифф. Ассистент любит заодно «улучшить» соседний код.
6. **Начинай с того, что часто меняется.** Идеальный порядок в модуле, который никто не трогает годами, не окупится. Порядок там, где ты работаешь каждую неделю, окупится быстро.

## Коротко

- Рефакторинг — изменение устройства кода без изменения его поведения.
- Это не переписывание, не новые функции и не исправление багов.
- Он окупается тем, что каждое следующее изменение дешевле и безопаснее, а ИИ-ассистенты ошибаются реже.
- Делать его стоит маленькими шагами с проверкой и коммитом после каждого.
- Начинать лучше с кода, который ты меняешь чаще всего.

SUBXCAT помогает привести код в порядок без остановки разработки и без сюрпризов для пользователей.
