Рефакторинг кода простым языком: что это, когда нужен — обложка

Знаете это чувство, когда вы долго собираете что-то, постепенно дополняя и перерабатывая, а в итоге получаете кашу? А если над этим работают ещё несколько человек, каждый со своим видением? Например, вы пишете книгу на протяжении десятилетий. За это время изменится ваше мировоззрение, сменится множество помощников. Когда книга будет готова, придётся обязательно перечитать её целиком и аккуратно убрать смысловые неувязки, логические ошибки и исправить грамматику.

Рефакторинг — это переработка кода. Как если бы вы переписывали книгу, не меняя её содержания. Давайте разберёмся, когда он нужен, а когда — нет.

Что такое рефакторинг?

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

Для чего нужен рефакторинг?

  • чтобы сделать код понятнее

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

  • для ускорения разработки, чтобы код был проще и работал быстрее.

Для расширения функциональности программы лучше не «лепить» дополнительный код поверх старого, а сначала провести рефакторинг. Задача здесь та же, что и при лечении кариеса: сначала подчищают повреждённое место, чтобы новая пломба держалась лучше.

  • для улучшения стабильности работы программы.

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

Когда нужен рефакторинг?

Сигналы для заказчика, что стоит принять предложение прорефакторить от программиста:

  • если проект идёт уже давно, а требования часто меняются
  • программа начинает хуже работать: работает медленно, часто зависает
  • ошибки при оценке сроков и рост затрат времени на реализацию новой функциональности
  • если программисты менялись
  • вы ещё долго будете пользоваться этим проектом, поддерживать и дорабатывать его: время, потраченное на рефакторинг сейчас, окупится тем, что дальнейшая разработка пойдёт быстрее, а багов будет меньше — «потрать 50 часов сейчас, чтобы сэкономить сотни в будущем»

Сигналы для заказчика, что предлагают рефакторинг ради рефакторинга, и выгоды он не принесёт:

  • нет серьёзных или частых проблем в работе программы
  • если проект короткий и требования не менялись
  • если вы не планируете долго дорабатывать проект

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

- Громоздкие классы (каждый класс должен выполнять одну задачу);
- Длинные методы, «лапшевидные» контроллеры;
- Много параметров в методах;
- Неиспользование возможностей фреймворка;
- Плохие имена переменных и функций;
- Много повторяющегося кода;
- Отсутствие документации.

Но лучше всего, конечно, найти программистов, которым доверяешь :)

Когда рефакторинг не нужен?

  • Когда код настолько плох, что поддержка и добавление нового функционала займут слишком много времени
  • Когда программа написана на слишком устаревших технологиях, которые больше не поддерживаются. Пример: Flash больше не поддерживается браузерами — рефакторить или нет, но работать не будет.

Что делать в таких ситуациях? Вот что:

Рефакторинг кода простым языком: что это, когда нужен, image #1

И начинайте писать с нуля :)

Можно ли обойтись без рефакторинга?

Задаваясь таким вопросом, сначала спросите себя: «А можно сразу писать без ошибок?» Ответ — нет. Люди не машины, и всегда найдутся факторы, снижающие качество кода. Рефакторинг, однако, при правильном использовании помогает поддерживать код проекта в хорошем состоянии. Он также сокращает время на добавление новой функциональности и упрощает работу для новых разработчиков. Это, в свою очередь, открывает возможности для привлечения клиентов и развития маркетинга — куда более полезное занятие, чем постоянное увеличение команды из-за сорванных сроков разработки :)

  • Вопросы клиентов