Рефакторинг: что это такое
Что вообще происходит?
Что можно улышать: “Тут надо бы порефакторить”. “Задачу пока не доделал, там пришлось сначала рефакторинг небольшой сделать”. “Там все перерефакторили и теперь мой код не мержится”.
Рефакторить программу (refactor) – это значит менять код, чтобы с ним стало удобнее работать, но чтобы поведение кода не поменялось.
Рефакторинг (refactoring) – это изменение в коде, которое не меняет поведение, но делает код удобнее в работе.
Главная книга про рефакторинг – Мартин Фаулер, “Рефакторинг: улучшение существующего кода”.
Зачем?
Зачем менять код, если он уже работает?
Чтобы сделать код:
- более читаемым
- более удобным для тестирования
- более удобным для повторного использования
- менее хрупким
Примеры рефакторингов
- Выделить кусок метода/функции в новый метод/функцию
- переместить метод из одного класса в другой
- удалить метод-посредник, который не делает содержательной работы, а только вызывает другогй метод
- добавить новый параметр в метод/функцию
- удалить неиспользуемый параметр из метода/функции
…и еще много других. В книге Фаулера есть “список рефакторингов”, там более 70 пунктов.
Техника безопасности
Как ничего не сломать при проведении рефакторинга?
Может помочь:
- (качественные) юнит-тесты
- рефакторинг с помощью автоматизированных инструментов в IDE (не всегда возможно, но если возможно – это хороший вариант)
И еще одно правило безопасных рефаторингов: разделяй рефаторинг и реализацию новой функциональности. Если реализуешь новую фичу и попутно делаешь рефакторинг, сделай рефакторинг сначала и закоммить/замержи в trunk/master. А потом делай и коммить/мержи новую фичу.
Ссылки
- коротко про рефакторинг, с примерами: https://skillbox.ru/media/code/chto_takoe_refaktoring_koda_i_zachem_on_nuzhen/
- “главная книга про рефакторинг”: Мартин Фаулер, “Рефакторинг: улучшение существующего кода” http://www.symbol.ru/alphabet/30436.html
- рефакторинги Java-кода в Intellij IDEA (англ.): https://www.jetbrains.com/help/idea/refactoring-source-code.html
- рефакторинги python-кода в PyCharm (англ.): https://www.jetbrains.com/help/pycharm/refactoring-source-code.html
- рефакторинги javascript-кода в WebStorm (англ.): https://www.jetbrains.com/help/webstorm/specific-javascript-refactorings.html
- рефакторинги C++ кода в VisualStudio (англ.): https://docs.microsoft.com/en-us/cpp/ide/writing-and-refactoring-code-cpp