От беспорядка к ясности: рефакторинг кода Python с помощью одной команды
Написание чистых и элегантных кодовых баз — недооцененный навык программирования. Многие программисты, особенно новички, просто сосредотачиваются на правильном понимании своих основ.
Однако лишь немногие следят за удобочитаемостью и ремонтопригодностью, поскольку они предполагают, что они единственные, кто когда-либо будет использовать код.
Это происходит только тогда, когда они в конечном итоге переходят к совместным проектам, где после месяцев (если не лет) беспорядочных и неэлегантных привычек программирования приходится приспосабливаться к «правильным» методам программирования.
Рефакторинг кода — неотъемлемая часть процесса разработки программного обеспечения, но его часто упускают из виду или им пренебрегают.
На самом деле, Zen Python гласит:
Если реализацию трудно объяснить, это плохая идея. Если реализацию легко объяснить, это может быть хорошей идеей.
Хотя понятно, что рефакторинг кода — это не то занятие, которого ждут с нетерпением, тем не менее, он важен по целому ряду причин. Например, вы можете поддерживать свою кодовую базу в чистоте и порядке, экономя время и усилия в долгосрочной перспективе.
Чтобы упростить задачу, не было бы неплохо иметь инструмент, который мог бы выделить потенциальные области рефакторинга, чтобы мы могли просмотреть их вручную?
Поэтому в этом блоге продемонстрируем, как вы можете провести рефакторинг кода с помощью Sourcery — автоматического инструмента рефакторинга кода, который делает ваш код более понятным, кратким и понятным на Python.
Установка и настройка
Вы можете использовать Sourcery в качестве плагина IDE в VS Code и PyCharm, интерфейсе командной строки (CLI), Sublime Text, Vim, GitHub и некоторых других.
В этом блоге мы сосредоточимся конкретно на использовании Sourcery в IDE и CLI.
Командная строка
Вы можете установить интерфейс командной строки Sourcery, выполнив следующую команду:
pip install sourcery-cli
После установки вам необходимо войти в систему с помощью этой команды:
sourcery login
После входа в систему вы увидите аналогичный ответ в вашем терминале:
IDE для кода Visual Studio
Вы можете использовать Sourcery в VS Code, установив его расширение. Это шаги:
Рефакторинг кода в CLI
Далее давайте посмотрим на несколько демонстраций того, как вы можете реорганизовать код с помощью Sourcery в CLI.
Здесь мы напишем несколько фрагментов кода в скрипте, проведем его рефакторинг с использованием Sourcery и рассмотрим предложения.
Демонстрация рефакторинга кода #1
Предположим, у нас есть файл my_code.py
:
## my_code.py
def find_even(numbers):
even_numbers = []
for num in numbers:
if num%2 == 0:
even_numbers.append(num)
print(even_numbers)
Чтобы выполнить рефакторинг, выполните следующую команду:
sourcery review --in-place my_code.py
Таким образом, рефакторинг искусственного интеллекта Sourcery преобразует наш код в:
## my_code.py
def find_even(numbers):
even_numbers = [num for num in numbers if num%2 == 0]
print(even_numbers)
Предлагаемое изменение является точным, кратким и элегантным.
Демонстрация рефакторинга кода #2
Рассмотрим теперь, что наш файл my_code.py
имеет следующий код:
# my_code.py
def is_special_number(number):
if number == 7:
return True
elif number == 18:
return True
else:
return False
Чтобы выполнить рефакторинг, выполните следующую команду:
sourcery review --in-place my_code.py
На этот раз мы видим следующие изменения в файле:
# my_code.py
def is_special_number(number):
return number in [7, 18]
Это, опять же, правильно и чисто.
Демонстрация рефакторинга кода #3
Рассмотрим пример вложенных операторов if
:
## my_code.py
def check_numbers(number1, number2):
if number1:
if number2:
return True
return False
Далее мы запускаем следующую команду:
sourcery review --in-place my_code.py
Sourcery предлагает внести следующие изменения в файл:
## my_code.py
def check_numbers(number1, number2):
return bool(number1 and number2)
Это действительно правильно и более элегантно, чем раньше.
Демонстрация рефакторинга кода #4
Далее у нас есть цикл for
, который определяет, содержит ли входной список чисел положительное целое число или нет.
## my_code.py
def has_positive(numbers):
for number in numbers:
if number>0:
return True
return False
Идеальный способ сделать это - использовать any()
в Python. Давайте посмотрим, сможет ли Sourcery обнаружить это.
Мы запускаем следующую команду:
sourcery review --in-place my_code.py
Sourcery предлагает внести следующие изменения в файл:
def has_positive(numbers):
return any(number>0 for number in numbers)
Демонстрация рефакторинга кода #5
Далее у нас есть условие if
, которое присваивает значение переменной my_var
на основе условия
## my_code.py
def set_variable(condition):
if condition:
my_var = 1
else:
my_var = 2
return my_var
Идеальный способ сделать это - использовать if
-выражение в Python. Давайте посмотрим, предполагает ли это Sourcery.
Для рефакторинга мы запускаем следующую команду:
sourcery review --in-place my_code.py
Sourcery предлагает внести следующие изменения в файл:
def set_variable(condition):
return 1 if condition else 2
Рефакторинг кода в IDE
Далее давайте посмотрим, как мы можем рефакторировать код в VS Code.
Для этой демонстрации мы перенесем пять демонстраций рефакторинга кода, приведенных выше, в скрипт, открытый в VS Code.
Как только мы переключаем панель, мы видим предложения по рефакторингу от Sourcery. Это показано ниже:
Как только мы наведем курсор на предложение на панели и нажмем знак предупреждения ⚠️, мы увидим три варианта, как показано ниже:
Первый вариант - провести рефакторинг кода. Второй пропускает предложение. Окончательный вариант никогда не покажет предложенный рефакторинг ни в одном файле.
После выбора первого варианта Sourcery проведет рефакторинг кода. Это показано ниже:
Вывод
Поздравляем вас с тем, что вы сделали шаг к написанию более чистого кода, который будет иметь большое значение в вашей карьере программиста.
Рефакторинг кода является неотъемлемой частью комплексного процесса разработки программного обеспечения, который может значительно улучшить качество и ремонтопригодность вашей кодовой базы, где такие инструменты, как Sourcery, могут оказать огромную помощь.
Более того, иногда может возникнуть желание провести рефакторинг кода в соответствии со своими собственными рекомендациями. К счастью, с помощью Sourcery вы можете предоставить пользовательские правила для персонализированного рефакторинга.