DevGang
Авторизоваться

От беспорядка к ясности: рефакторинг кода 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, установив его расширение. Это шаги:

Установка Sourcery в VS Code
Установка 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. Это показано ниже:

Рассмотрение предложений по рефакторингу в VS Code
Рассмотрение предложений по рефакторингу в VS Code

Как только мы наведем курсор на предложение на панели и нажмем знак предупреждения ⚠️, мы увидим три варианта, как показано ниже:

Параметры, предоставляемые Sourcery Extension в рефакторинге
Параметры, предоставляемые Sourcery Extension в рефакторинге

Первый вариант - провести рефакторинг кода. Второй пропускает предложение. Окончательный вариант никогда не покажет предложенный рефакторинг ни в одном файле.

После выбора первого варианта Sourcery проведет рефакторинг кода. Это показано ниже:

Рефакторинг в VS Code
Рефакторинг в VS Code

Вывод

Поздравляем вас с тем, что вы сделали шаг к написанию более чистого кода, который будет иметь большое значение в вашей карьере программиста.

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

Более того, иногда может возникнуть желание провести рефакторинг кода в соответствии со своими собственными рекомендациями. К счастью, с помощью Sourcery вы можете предоставить пользовательские правила для персонализированного рефакторинга.

#Python #Data Science #Machine Learning
Комментарии 1
Дмитрий Дронов 23.12.2022 в 02:56

Правильно ли я понимаю что код на рефакторинг улетает на непонятное облако а в условиях соглашения указано что в случае копипаста кода вы отказываетесь от претензий?

Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу