Ознакомьтесь со сценариями рефакторинга кода и рекомендациями по GitHub Copilot
Рефакторинг кода — это процесс реструктуризации существующего кода без изменения его поведения. Преимущества рефакторинга включают повышение удобочитаемости кода, снижение сложности, упрощение обслуживания кода и упрощение добавления новых функций. Реализация GitHub Copilot рекомендаций помогает эффективнее работать и получать лучшие результаты.
рекомендации по GitHub Copilot
GitHub Copilot — это мощный инструмент, помогающий рефакторингу и улучшению кода. Однако, чтобы получить лучшие результаты, следует следовать некоторым рекомендациям при использовании GitHub Copilot.
Улучшите ответы с помощью более эффективных запросов
Вы можете повысить качество ответов GitHub Copilot, написав более эффективные запросы. Хорошо созданный запрос может помочь GitHub Copilot лучше понять ваши требования и создать более релевантные предложения кода.
Следующие рекомендации помогут вам создать лучшие запросы:
Начните с общих моментов, затем переходите к конкретным.
Generate a Calculator class. Add methods for addition, subtraction, multiplication, division, and factorial. Don't use any external libraries and don't use recursion.Дайте примеры того, что вы хотите.
Generate a function that takes a string and returns the number of vowels in it. For example: findVowels("hello") returns 2, findVowels("sky") returns 0.Разбиите сложные задачи на более простые задачи.
Вместо того чтобы обратиться к GitHub Copilot с просьбой "Создать приложение для планирования питания," разбейте ваши запросы на более мелкие задачи.
Рассмотрим пример.
Generate a function that takes a list of ingredients and returns a list of recipes.Generate a function that takes a list of recipes and returns a shopping list.Generate a function that takes a list of recipes and returns a meal plan for the week.Укажите правильный контекст, например выбор кода, файлы, выходные данные терминала и многое другое.
Например, используйте переменную
#codebaseдля ссылки на всю кодовую базу: "Где строка подключения базы данных используется в #база_кода?"Повторно пересмотрите ваши запросы.
Укажите дальнейшие запросы на уточнение или изменение ответа.
Например, если начать с следующего запроса:
Написать функцию для вычисления факториала числа.
Вы можете выполнить следующие действия:
"Не используйте рекурсию и оптимизируйте с помощью кэширования".
Затем:
"Используйте значимые имена переменных".
Сохраняйте журнал чата в актуальном формате.
GitHub Copilot использует журнал беседы для предоставления контекста. Удалите прошлые вопросы и ответы из истории, если они не нужны. Или запустите новый сеанс, если вы хотите изменить контекст.
Предоставление правильного контекста и инструментов
Обогатите запросы соответствующим контекстом, чтобы получить более точные и соответствующие ответы в чате. С помощью правильных инструментов вы можете повысить производительность разработчика.
В "Агенте" нажмите кнопку "Инструменты", чтобы настроить инструменты, которые вы хотите использовать, или явно добавить их в свой запрос.
Используйте
#codebase, чтобы GitHub Copilot автоматически находил правильные файлы, выполняя поиск кода.Используйте средство
#fetchдля получения содержимого из веб-страницы или использования#githubRepoдля выполнения поиска кода в репозитории GitHub.Указывайте файлы, папки или символы в вашем запросе, используя
#<file name>,#<folder name>, или#<symbol>.Перетащите файлы, папки или вкладки редактора в запрос чата.
Добавьте проблемы, тестовые сбои или выходные данные терминала в запрос чата, чтобы добавить контекст в конкретный сценарий.
Замечание
При использовании агента GitHub Copilot автономно находит соответствующие файлы и контекст для вас.
Распространенные сценарии рефакторинга кода
GitHub Copilot помогает быстро рефакторинговать код различными способами. В следующем списке приведены некоторые распространенные сценарии рефакторинга кода:
- Оптимизация неэффективного кода
- Очистка повторяющегося кода
- Создание более краткого кода
- Разделение сложных единиц кода
- Перезапись условного кода для повышения удобочитаемости
- Переформатирование кода для использования другой структуры
Использование GitHub Copilot для оптимизации неэффективного кода
GitHub Copilot поможет оптимизировать код. Например, можно оптимизировать код, чтобы ускорить выполнение кода.
Рассмотрим следующий скрипт Bash:
#!/bin/bash
# Find all .txt files and count the number of lines in each file
for file in $(find . -type f -name "*.txt"); do
wc -l "$file"
done
Функции чата можно использовать для оценки параметров оптимизации различных аспектов сценария, таких как производительность.
#!/bin/bash
# Find all .txt files and count the number of lines in each file (improved performance)
find . -type f -name "*.txt" -print0 | xargs -0 wc -l
Использование GitHub Copilot для очистки повторяющегося кода
Избегание повторений упростит изменение и отладку вашего кода. Например, если одно и то же вычисление выполняется несколько раз в разных местах в файле, можно переместить вычисление в функцию.
В следующем очень простом примере JavaScript одно и то же вычисление (цена элемента умножается на количество проданных элементов) выполняется в двух местах.
let totalSales = 0;
let applePrice = 3;
let appleSold = 100;
totalSales += applePrice * appleSold;
let orangePrice = 2;
let orangeSold = 50;
totalSales += orangePrice * orangeSold;
console.log(`Total: ${totalSales}`);
Вы можете попросить функции чата переместить повторяющиеся вычисления в функцию.
function calculateTotal(price, quantity) {
return price * quantity;
}
let totalSales = 0;
let applePrice = 3;
let appleSold = 100;
totalSales += calculateTotal(applePrice, appleSold);
let orangePrice = 2;
let orangeSold = 50;
totalSales += calculateTotal(orangePrice, orangeSold);
console.log(`Total: ${totalSales}`);
Используйте GitHub Copilot, чтобы сделать код более кратким
Если код ненужно подробный, это может быть трудно читать и поддерживать. GitHub Copilot может предложить более краткую версию выбранного кода.
Следующий Python код выводит область прямоугольника и круга, но код может быть написан более кратко:
def calculate_area_of_rectangle(length, width):
area = length * width
return area
def calculate_area_of_circle(radius):
area = 3.14 * radius * radius
return area
rectangle_length = 5
rectangle_width = 10
rectangle_area = calculate_area_of_rectangle(rectangle_length, rectangle_width)
print(f"Area of rectangle: {rectangle_area}")
circle_radius = 7
circle_area = calculate_area_of_circle(circle_radius)
print(f"Area of circle: {circle_area}")
GitHub Copilot может помочь вам рефакторизовать код и сделать его более кратким.
def calculate_area_of_rectangle(length, width):
return length * width
def calculate_area_of_circle(radius):
return 3.14 * radius * radius
rectangle_length = 5
rectangle_width = 10
print(f"Area of rectangle: {calculate_area_of_rectangle(rectangle_length, rectangle_width)}")
circle_radius = 7
print(f"Area of circle: {calculate_area_of_circle(circle_radius)}")
Использование GitHub Copilot для разделения сложных единиц кода
Крупные методы или функции, выполняющие несколько операций, могут предложить меньше возможностей для повторного использования, чем меньшие, более простые функции, ориентированные на выполнение определенной операции. Они также могут быть более сложными для понимания и отладки.
GitHub Copilot поможет разделить сложные блоки кода на небольшие единицы, которые более подходят для повторного использования.
Следующий Python код является очень простым примером, но он показывает принцип разделения одной функции на две функции, выполняющие определенные операции.
import pandas as pd
from pandas.io.formats.styler import Styler
def process_data(item, price):
# Cleanse the data
item = item.strip() # Remove leading and trailing whitespace
price = price.strip() # Remove leading and trailing whitespace
price = float(price) # Convert price to a float
# More cleansing operations can be added here
# Create and print a DataFrame
data = {'Item': [item], 'Price': [price]}
df = pd.DataFrame(data)
print(df.to_string(index=False))
# Example usage
item = " Apple "
price = " 1.50 "
process_data(item, price)
Вы можете использовать GitHub Copilot для рефакторинга кода для создания функций для очистки данных, печати данных и обработки данных.
import pandas as pd
from pandas.io.formats.styler import Styler
def cleanse_data(item, price):
# Cleanse the data
item = item.strip() # Remove leading and trailing whitespace
price = price.strip() # Remove leading and trailing whitespace
price = float(price) # Convert price to a float
return item, price
def print_data(item, price):
# Create and print a DataFrame
data = {'Item': [item], 'Price': [price]}
df = pd.DataFrame(data)
print(df.to_string(index=False))
def process_data(item, price):
item, price = cleanse_data(item, price)
print_data(item, price)
# Example usage
item = " Apple "
price = " 1.50 "
item, price = cleanse_data(item, price)
print_data(item, price)
Использование GitHub Copilot для перезаписи условного кода для повышения удобочитаемости
Часто существует несколько способов написания кода, выполняющегося или не выполняющегося, в зависимости от различных условий. Некоторые условные структуры лучше подходят, чем другие для конкретных вариантов использования, и выбор альтернативной условной структуры иногда может упростить чтение кода.
Этот метод Java использует ряд инструкций if и else if для определения выполнения операции:
public string getSound(String animal) {
if (animal == null) {
System.out.println("Animal is null");
} else if (animal.equalsIgnoreCase("Dog")) {
return "bark";
} else if (animal.equalsIgnoreCase("Cat")) {
return "meow";
} else if (animal.equalsIgnoreCase("Bird")) {
return "tweet";
}
return "unknown";
}
Оператор switch может быть лучшим способом применения той же логики.
/**
* Returns the sound made by the specified animal.
*
* @param animal the name of the animal
* @return the sound made by the animal, or "unknown" if the animal is not recognized
*/
public String getAnimalSound(String animal) {
return switch (animal) {
case null -> "Animal is null";
case "Dog" -> "bark";
case "Cat" -> "meow";
case "Bird" -> "tweet";
default -> "unknown";
};
}
Использование GitHub Copilot для переформатации кода для использования другой структуры
Предположим, у вас есть следующая функция в JavaScript:
function listRepos(o, p) {
return fetch(`https://api.github.com/orgs/${o}/repos?per_page=${parseInt()}`)
.then(response => response.json())
.then( (data) => data);
}
Если в стандартах программирования требуется использовать нотацию со стрелками для функций и описательные имена параметров, можно использовать GitHub Copilot для внесения этих изменений.
const listRepositories = (organization, perPage) => {
return fetch(`https://api.github.com/orgs/${organization}/repos?per_page=${parseInt(perPage)}`)
.then(response => response.json())
.then(data => data);
};
Сводка
GitHub Copilot поможет вам выполнять рефакторинг кода разными способами. Вы можете использовать представление чата или встроенный чат, чтобы попросить GitHub Copilot оптимизировать неэффективный код, очистить повторяющийся код, сделать код более кратким, разделить сложные единицы кода, переписать условный код для повышения удобочитаемости и переформатировать код, чтобы использовать другую структуру.