Python:
Рефакторинг
Как:
Предположим, у вас есть кусок кода, который рассчитывает и выводит площадь и периметр прямоугольника с учетом его длины и ширины. Он выполняет свою работу, но это повторяющееся и немного запутанное.
# Исходная версия
length = 4
width = 3
# Расчет площади и периметра
area = length * width
perimeter = 2 * (length + width)
print("Площадь:", area)
print("Периметр:", perimeter)
Мы можем рефакторить это, инкапсулируя функциональность в функции, что делает код более организованным и повторно используемым:
# Рефакторинговая версия
def calculate_area(length, width):
return length * width
def calculate_perimeter(length, width):
return 2 * (length + width)
# использование
length = 4
width = 3
print("Площадь:", calculate_area(length, width))
print("Периметр:", calculate_perimeter(length, width))
Оба фрагмента выводят один и тот же результат:
Площадь: 12
Периметр: 14
Но рефакторинговая версия чище и разделяет заботы, что облегчает обновление одного расчета без воздействия на другой.
Погружение в тему
Рефакторинг имеет свои корни в ранние дни программной инженерии, когда программисты поняли, что код может — и должен — быть улучшен, даже если он уже “работает”. Знаковая книга Мартина Фаулера “Рефакторинг: улучшение проектирования существующего кода” изложила многие основные принципы и техники. Он знаменито сказал: “Любой дурак может написать код, который поймет компьютер. Хорошие программисты пишут код, который могут понять люди.”
Альтернативами рефакторингу могут быть переписывание кода с нуля или внесение незначительных изменений без систематического улучшения. Однако, как правило, рефакторинг более экономически эффективен, чем переписывание, и менее рискован, чем адаптивные изменения. Детали реализации могут быть конкретными для каждой программной парадигмы; однако объектно-ориентированное программирование особенно хорошо подходит для рефакторинга, особенно с техниками вроде извлечения методов (как наши функции calculate_area
и calculate_perimeter
), встраивания, перемещения функций между объектами и переименовывания методов или переменных для ясности.
Рефакторинг на Python часто использует инструменты вроде PyCharm
, который имеет встроенные возможности рефакторинга, или rope
, библиотеку Python, специально предназначенную для рефакторинга. Внимательное использование системы контроля версий, такой как git
, во время рефакторинга настоятельно рекомендуется для поэтапного отслеживания изменений.
Смотрите также
Для тех, кто жаждет большего, погрузитесь в следующие ресурсы:
- Книга Мартина Фаулера: Рефакторинг: улучшение проектирования существующего кода
- Рефакторинг на Python с
rope
: GitHub - rope - Документация по рефакторингу в PyCharm: Jetbrains PyCharm Рефакторинг исходного кода
- Refactoring.guru: Рефакторинг и шаблоны проектирования
- Лекции о чистом коде от Дяди Боба (Роберта С. Мартина): Чистый код - Дядя Боб / Урок 1