Генерируйте код с помощью предложений GitHub Copilot для завершения кода
GitHub Copilot может предоставлять предложения по завершению кода для многочисленных языков программирования и широкий спектр платформ, но особенно хорошо подходит для Python, JavaScript, TypeScript, Ruby, Go, C# и C++. Завершения строки кода создаются на основе контекста написанного кода. Вы можете принять, отклонить или частично принять предложения, предоставляемые GitHub Copilot.
GitHub Copilot предоставляет два способа создания завершения строки кода:
Из комментария: можно сгенерировать автозавершения строк кода, написав комментарий, описывающий код, который хотите создать. GitHub Copilot предоставляет предложения по завершению кода на основе комментариев, которые вы пишете.
Из кода: можно создавать завершения строки кода, запуская кодовую строку или нажав клавишу ВВОД после завершения строки кода. GitHub Copilot предоставляет предложения по завершению кода на основе написанного кода.
Создание завершения строки кода из комментария с помощью GitHub Copilot
GitHub Copilot создает предложения по завершению кода на основе комментариев и существующего контекста приложения.
С помощью комментариев можно описать фрагменты кода, методы, структуры данных и другие элементы кода.
Предположим, у вас есть следующий фрагмент кода:
namespace ReportGenerator;
class QuarterlyIncomeReport
{
static void Main(string[] args)
{
// create a new instance of the class
QuarterlyIncomeReport report = new QuarterlyIncomeReport();
// call the GenerateSalesData method
// call the QuarterlySalesReport method
}
public void QuarterlySalesReport()
{
Console.WriteLine("Quarterly Sales Report");
}
}
Например, для создания структуры данных можно использовать следующий комментарий:
// public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit price
GitHub Copilot создает одно или несколько предложений по завершению кода на основе комментариев кода и файлов кода, открытых в редакторе.
Обратите внимание на типы данных, используемые для объявления полей структуры данных. GitHub Copilot выбирает типы данных и имена переменных на основе существующего кода и комментария кода. GitHub Copilot пытается определить, как приложение использует переменные и определяет типы данных соответствующим образом.
Когда GitHub Copilot создает несколько предложений, вы можете циклировать предложения, выбрав стрелки влево или вправо (>или) слева <". Это позволяет просматривать и выбирать предложения, которые лучше всего соответствуют вашим потребностям.
Это нормально принять предложение о завершении кода, которое не является точным совпадением для того, что вы хотите. Однако изменения, необходимые для исправления, должны быть понятными. В этом случае некоторые типы данных не нужны, но их можно изменить после принятия предлагаемого автозаполнения.
Если ни один из предлагаемых вариантов не похож на то, что вам нужно, можно попробовать два способа. Чтобы открыть новую вкладку редактора, содержащую список других предложений, нажмите клавиши CTRL + ВВОД . Эта комбинация горячего ключа открывает новую вкладку, содержащую до 10 дополнительных предложений. За каждым предложением следует кнопка, которую можно использовать для принятия предложения. Вкладка закрывается автоматически после принятия предложения. Другим вариантом является нажатие клавиши ESC , чтобы закрыть предложения и повторить попытку. Вы можете изменить комментарий кода, чтобы обеспечить больше контекста для работы с GitHub Copilot.
Замечание
GitHub Copilot может иногда предлагать предложение на этапах. В этом случае можно нажать клавишу ВВОД, чтобы просмотреть дополнительные этапы предложения после нажатия клавиши TAB.
Чтобы принять предлагаемую структуру данных, нажмите клавишу TAB или нажмите кнопку "Принять".
Чтобы изменить типы данных полей, обновите код следующим образом:
public struct SalesData
{
public DateOnly dateSold;
public string departmentName;
public int productID;
public int quantitySold;
public double unitPrice;
}
Быстрое изменение предложений по завершению кода помогает гарантировать, что вы создаете нужный код. Особенно важно внести исправления в начале процесса разработки, когда необходимо разработать большую часть базы кода. Последующие завершения кода основаны на уже написанном коде, поэтому важно убедиться, что код является максимально точным.
Создание завершения строки кода из комментария с помощью GitHub Copilot
GitHub Copilot создает предложения по завершению кода на основе комментариев и существующего контекста приложения. С помощью комментариев можно описать фрагменты кода, методы, структуры данных и другие элементы кода.
Выполните следующие действия, чтобы выполнить этот раздел упражнения:
В файле Program.cs создайте две пустые строки кода под методом
Main.Чтобы создать структуру данных, которую можно использовать для создания тестовых данных, создайте следующий комментарий кода и нажмите клавишу ВВОД:
// public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit priceGitHub Copilot создает одно или несколько предложений по завершению кода на основе комментариев кода и любого существующего кода, который он находит в приложении.
Просмотрите предложения по завершению кода, предоставляемые GitHub Copilot.
Замечание
Если GitHub Copilot создает предложения для метода, а не структуры данных, введите общедоступную строку и дождитесь обновления предложения по завершению кода. GitHub Copilot использует дополнительную информацию для улучшения своих предложений.
Обратите внимание на типы данных, используемые для объявления полей структуры данных. GitHub Copilot выбирает типы данных и имена переменных на основе существующего кода и комментария кода. GitHub Copilot пытается определить, как приложение использует переменные и определяет типы данных соответствующим образом.
Когда GitHub Copilot создает несколько предложений, вы можете циклировать предложения, выбрав стрелки влево или вправо (
>или) слева<". Это позволяет просматривать и выбирать предложения, которые лучше всего соответствуют вашим потребностям.Это нормально принять предложение о завершении кода, которое не является точным совпадением для того, что вы хотите. Однако изменения, необходимые для исправления, должны быть понятными. В этом случае некоторые типы данных не нужны, но их можно изменить после принятия предлагаемого автозаполнения.
Если ни один из предлагаемых вариантов не похож на то, что вам нужно, можно попробовать два способа. Чтобы открыть новую вкладку редактора, содержащую список других предложений, нажмите клавиши CTRL + ВВОД . Эта комбинация горячего ключа открывает новую вкладку, содержащую до 10 дополнительных предложений. За каждым предложением следует кнопка, которую можно использовать для принятия предложения. Вкладка закрывается автоматически после принятия предложения. Другим вариантом является нажатие клавиши ESC , чтобы закрыть предложения и повторить попытку. Вы можете изменить комментарий кода, чтобы обеспечить больше контекста для работы с GitHub Copilot.
Замечание
GitHub Copilot может иногда предлагать предложение на этапах. В этом случае можно нажать клавишу ВВОД, чтобы просмотреть дополнительные этапы предложения после нажатия клавиши TAB.
Чтобы принять предлагаемую структуру данных, нажмите клавишу TAB или нажмите кнопку "Принять".
Чтобы изменить типы данных полей, обновите код следующим образом:
public struct SalesData { public DateOnly dateSold; public string departmentName; public int productID; public int quantitySold; public double unitPrice; }Быстрое изменение предложений по завершению кода помогает гарантировать, что вы создаете нужный код. Особенно важно внести исправления в начале процесса разработки, когда необходимо разработать большую часть базы кода. Завершение кода основано на существующем коде, поэтому важно убедиться, что код является максимально точным.
Создайте две пустые строки кода под структурой
SalesDataданных.Чтобы создать метод, который создает тестовые данные с помощью
SalesDataструктуры данных, напишите следующий комментарий кода и нажмите клавишу ВВОД:/* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */Просмотрите предложения по завершению кода, предоставляемые GitHub Copilot.
Обратите внимание, что
GenerateSalesDataметод предназначен для возврата массиваSalesDataобъектов. Метод создает 1000 записей тестовых данных с случайными значениями, назначенными каждому полюSalesDataструктуры данных.
Вы всегда должны просматривать предложения, предлагаемые GitHub Copilot и GitHub Copilot Chat, даже если они выглядят правильными.
Замечание
Если GitHub Copilot предлагает одну строку кода, а не завершенный
GenerateSalesDataметод, нажмите клавиши CTRL + ВВОД , чтобы открыть вкладку предложений GitHub Copilot. Просмотрите предложения на новой вкладке. На следующем шаге нажмите кнопку "Принять предложение #", чтобы принять предложение. GitHub Copilot предоставляет предложения постепенно. Несмотря на то, что вы можете постепенно принимать завершения кода, лучше использовать вкладку предложений GitHub Copilot, чтобы просмотреть полные предложения, прежде чем принимать решение о принятии или отмене.Прокрутите предложения по завершению кода и выберите оптимальное соответствие требованиям.
Чтобы принять завершение кода, нажмите клавишу TAB.
Обратите внимание, что предложение о завершении кода содержит синтаксическую ошибку в коде, используемом
DateSoldдля создания поля.DateOnlyпринимает три целочисленных значения, которые должны быть указаны в правильном порядке: Year, Month, Day.Чтобы указать один год для кода, используемого для создания
DateSoldполя, обновите строку кода следующим образом:salesData[i].DateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29));При необходимости измените другие строки кода в соответствии со следующим фрагментом кода:
public SalesData[] GenerateSalesData() { SalesData[] salesData = new SalesData[1000]; Random random = new Random(); for (int i = 0; i < salesData.Length; i++) { salesData[i].dateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29)); salesData[i].departmentName = "Department " + random.Next(1, 11); salesData[i].productID = random.Next(1, 101); salesData[i].quantitySold = random.Next(1, 101); salesData[i].unitPrice = random.NextDouble() * 100; } return salesData; }
Возможность создания кода из комментариев кода — это мощная функция GitHub Copilot. С двумя комментариями вы смогли создать структуру данных и метод, который создает тестовые данные.
Создание завершения строки кода с помощью GitHub Copilot
GitHub Copilot может создавать завершения строки кода на основе введенного кода. Можно создать завершение строки кода двумя способами:
- Начните вводить строку кода, а затем подождите, пока GitHub Copilot предложит автозавершение для не готовой строки кода.
- Введите полную строку кода, нажмите клавишу ВВОД , а затем подождите, пока GitHub Copilot предложит автозавершение для следующей строки кода.
Замечание
GitHub Copilot создает предлагаемые завершения кода на основе введенного кода и контекста, определенного кодом в приложении. Чем больше кода имеется в вашем приложении, тем больше контекста имеет GitHub Copilot при создании ответа. GitHub Copilot может основывать ответы на существующий код, поэтому качество кода важно. По мере увеличения объема и качества существующего кода, поэтому качество и надежность завершений строки кода, предлагаемых GitHub Copilot. GitHub Copilot хорошо создает завершения строки кода для распространенных задач программирования и шаблонов, особенно если необходимо создать последовательность связанных компонентов.
В этой части упражнения вы работаете над методом QuarterlySalesReport .
Ниже приведены задачи, которые необходимо выполнить:
- Обновите конструктор метода с параметром, принимаюющим коллекцию
SalesDataобъектов. - Используйте GitHub Copilot для создания завершения строки кода, обрабатывающей данные о продажах для ежеквартального отчета.
- Запустите приложение и просмотрите ежеквартальный отчет о продажах.
Выполните следующие действия, чтобы выполнить этот раздел упражнения:
Обновите конструктор
QuarterlySalesReportметода следующим образом:public void QuarterlySalesReport(SalesData[] salesData)Запустите минуту, чтобы рассмотреть код, который необходимо разработать.
Концепция прямо вперед. Вы хотите, чтобы код вычислял ежеквартальные продажи на основе данных о продажах, а затем записывать отчет. Для этого коду необходимо выполнить следующее:
- Выполните итерацию по
salesDataколлекции. - Вычислите стоимость каждой продажи на основе количества проданных и цены на единицу.
- Используйте дату продаж, чтобы определить, к какой четверти принадлежит продажа.
- Суммирует продажи за каждый квартал.
- Напишите отчет о продажах по кварталу.
Один из вариантов — начать ввод кода для
foreachцикла, а затем увидеть, что предлагает GitHub Copilot.- Выполните итерацию по
В методе
QuarterlySalesReportсоздайте новую строку кода в верхней части блока кода.Между новой строкой кода и строкой кода, содержащей
Console.WriteLine(), должна быть по крайней мере одна пустая строка кода.Чтобы создать завершение строки кода, введите
foreach (и подождите, пока GitHub Copilot предложит варианты завершения строки кода.Просмотрите завершение кода, предлагаемое GitHub Copilot.
Предлагаемое завершение кода не является нужным.
Хотя GitHub Copilot предлагает
foreachцикл, который выполняет итерацию черезsalesDataцикл, нет анализа или вычислений внутри цикла. Предлагаемый код содержитConsole.WriteLineоператоры, которые вам не нужны или не желательны.На минуту рассмотрим, почему GitHub Copilot предлагает
Console.WriteLineзаявления.Помните, что GitHub Copilot создает предложения по завершению кода на основе контекста кода. В этом случае у вас нет большого кода для GitHub Copilot. И ситуация ухудшится.
Код, который GitHub Copilot видит внутри метода, является оператором
Console.WriteLine. Без другого контекста, доступного в методе, и никаких аналогичных методов в базе кода для рисования из GitHub Copilot завершается тем, что в цикле могутConsole.WriteLineforeachоператоры.GitHub Copilot лучше всего работает, когда код чист и сосредоточен. Если в коде отображаются лишние комментарии или инструкции кода, их можно удалить, прежде чем использовать завершение кода GitHub Copilot.
Чтобы очистить код перед предоставлением GitHub Copilot еще одну попытку, выполните следующие действия:
- Отмена предлагаемого
foreach (завершения кода. - Удалите введенную часть
foreach (инструкции. - Удалите инструкцию
Console.WriteLineизQuarterlySalesReportметода.
Теперь вы должны быть готовы попробовать GitHub Copilot еще раз.
- Отмена предлагаемого
Убедитесь, что метод выглядит примерно так, как
QuarterlySalesReportпоказано в следующем коде:public void QuarterlySalesReport(SalesData[] salesData) { }Поместите курсор на пустую строку кода внутри
QuarterlySalesReportметода, а затем нажмите клавишу ВВОД.Для создания предлагаемого завершения кода может потребоваться некоторое время для GitHub Copilot.
Чтобы просмотреть предложенные завершения кода, сделайте минуту.
Это важно
Полученные завершения кода, скорее всего, отличаются от предложений, показанных на следующем снимке экрана. Хотя GitHub Copilot имеет только имя метода и параметр для работы, это может быть достаточно для создания полезных предложений. Вы увидите предложения, которые вычисляют продажи по кварталу. Отклонение предложений и повторная попытка могут предоставить различные результаты.
Вы можете прокрутить предложения, выбрав
>или<.Обратите внимание, что предлагаемое завершение кода выполняет итерацию данных о продажах и выполняет ежеквартальные вычисления продаж.
Чтобы принять предлагаемое завершение кода, нажмите клавишу TAB.
Предлагаемое завершение кода вычисляет и отображает квартальный доход на основе данных о продажах.
// create a dictionary to store the quarterly sales data Dictionary<string, double> quarterlySales = new Dictionary<string, double>(); // iterate through the sales data foreach (SalesData data in salesData) { // calculate the total sales for each quarter string quarter = GetQuarter(data.dateSold.Month); double totalSales = data.quantitySold * data.unitPrice; if (quarterlySales.ContainsKey(quarter)) { quarterlySales[quarter] += totalSales; } else { quarterlySales.Add(quarter, totalSales); } } // display the quarterly sales report Console.WriteLine("Quarterly Sales Report"); Console.WriteLine("----------------------"); foreach (KeyValuePair<string, double> quarter in quarterlySales) { Console.WriteLine(entry.Key + ": $" + entry.Value); }Обратите внимание, что
GetQuarterметод использует месяц продажи для определения квартала продажи.Метод
GetQuarterсоздается далее.Создайте две пустые строки кода под методом
QuarterlySalesReport.Обратите внимание, что GitHub Copilot предлагает завершение кода для
GetQuarterметода.С помощью контекста, предоставленного
QuarterlySalesReportметодом, GitHub Copilot может легко создать завершение кода дляGetQuarterметода, который определяет квартал на основе месяца продажи.Просмотрите предлагаемое завершение строки кода для
GetQuarterметода.
Чтобы принять предлагаемое завершение кода, нажмите клавишу TAB.
public string GetQuarter(int month) { if (month >= 1 && month <= 3) { return "Q1"; } else if (month >= 4 && month <= 6) { return "Q2"; } else if (month >= 7 && month <= 9) { return "Q3"; } else { return "Q4"; } }Обратите внимание, что
Mainперед запуском кода необходимо выполнить метод.Комментарии в методе
Mainможно использовать для обновления кода.Поместите курсор в конец
// call the GenerateSalesData methodкомментария кода и нажмите клавишу ВВОД.GitHub Copilot использует комментарий, чтобы предложить оператор вызова для метода.
Просмотрите и примите завершение кода, предлагаемое GitHub Copilot.
Повторите процесс для
// call the QuarterlySalesReport methodкомментария кода.Метод
Mainдолжен содержать следующий код:static void Main(string[] args) { // create a new instance of the class QuarterlyIncomeReport report = new QuarterlyIncomeReport(); // call the GenerateSalesData method SalesData[] salesData = report.GenerateSalesData(); // call the QuarterlySalesReport method report.QuarterlySalesReport(salesData); }Пройдите минуту, чтобы просмотреть код в
QuarterlyIncomeReportклассе.namespace ReportGenerator { class QuarterlyIncomeReport { static void Main(string[] args) { // create a new instance of the class QuarterlyIncomeReport report = new QuarterlyIncomeReport(); // call the GenerateSalesData method SalesData[] salesData = report.GenerateSalesData(); // call the QuarterlySalesReport method report.QuarterlySalesReport(salesData); } /* public struct SalesData includes the following fields: date sold, department name, product ID, quantity sold, unit price */ public struct SalesData { public DateOnly dateSold; public string departmentName; public int productID; public int quantitySold; public double unitPrice; } /* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */ public SalesData[] GenerateSalesData() { SalesData[] salesData = new SalesData[1000]; Random random = new Random(); for (int i = 0; i < 1000; i++) { salesData[i].dateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29)); salesData[i].departmentName = "Department " + random.Next(1, 11); salesData[i].productID = random.Next(1, 101); salesData[i].quantitySold = random.Next(1, 101); salesData[i].unitPrice = random.NextDouble() * 100; } return salesData; } public void QuarterlySalesReport(SalesData[] salesData) { // create a dictionary to store the quarterly sales data Dictionary<string, double> quarterlySales = new Dictionary<string, double>(); // iterate through the sales data foreach (SalesData data in salesData) { // calculate the total sales for each quarter string quarter = GetQuarter(data.dateSold.Month); double totalSales = data.quantitySold * data.unitPrice; if (quarterlySales.ContainsKey(quarter)) { quarterlySales[quarter] += totalSales; } else { quarterlySales.Add(quarter, totalSales); } } // display the quarterly sales report Console.WriteLine("Quarterly Sales Report"); Console.WriteLine("----------------------"); foreach (KeyValuePair<string, double> quarter in quarterlySales) { Console.WriteLine(entry.Key + ": $" + entry.Value); } } public string GetQuarter(int month) { if (month >= 1 && month <= 3) { return "Q1"; } else if (month >= 4 && month <= 6) { return "Q2"; } else if (month >= 7 && month <= 9) { return "Q3"; } else { return "Q4"; } } } }Этот код был создан почти полностью с помощью завершения строки кода, созданной GitHub Copilot. Тем не менее, проверка предложений кода важна, и были необходимы исправления. Чтобы убедиться, что код соответствует вашим требованиям, всегда следует проверить завершения кода, предлагаемые GitHub Copilot.
Чтобы просмотреть выходные данные отчета, запустите приложение.
Откройте окно терминала в Visual Studio Code и введите следующую команду:
dotnet runВ выходных данных должен отображаться отчет о квартальном доходе, отображающий название отдела, квартал и доход для каждого отдела и квартала, представленный в тестовых данных.
Просмотрите выходные данные в окне терминала.
Хотя ежеквартальные результаты основаны на случайных числовых значениях, вы увидите отчет, форматированный следующим образом:
Quarterly Sales Report ---------------------- Q3: $635637.5019563352 Q4: $672247.315297204 Q2: $667269.194630603 Q1: $642769.2700531208
Сводка
Завершение строки кода — это мощная функция GitHub Copilot, которая помогает быстро и эффективно создавать код. Используя примечания для описания создаваемого кода, можно создавать структуры данных, методы и другие элементы кода с минимальными усилиями. Кроме того, GitHub Copilot может создавать завершения строки кода на основе введенного кода, что позволяет легко создавать сложные приложения.