Генерируйте код с помощью предложений 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 создает предложения по завершению кода на основе комментариев и существующего контекста приложения. С помощью комментариев можно описать фрагменты кода, методы, структуры данных и другие элементы кода.

Выполните следующие действия, чтобы выполнить этот раздел упражнения:

  1. В файле Program.cs создайте две пустые строки кода под методом Main .

  2. Чтобы создать структуру данных, которую можно использовать для создания тестовых данных, создайте следующий комментарий кода и нажмите клавишу ВВОД:

    // public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit price
    

    GitHub Copilot создает одно или несколько предложений по завершению кода на основе комментариев кода и любого существующего кода, который он находит в приложении.

  3. Просмотрите предложения по завершению кода, предоставляемые GitHub Copilot.

    Замечание

    Если GitHub Copilot создает предложения для метода, а не структуры данных, введите общедоступную строку и дождитесь обновления предложения по завершению кода. GitHub Copilot использует дополнительную информацию для улучшения своих предложений.

    Снимок экрана: завершение кода для комментария, описывающего структуру данных.

    Обратите внимание на типы данных, используемые для объявления полей структуры данных. GitHub Copilot выбирает типы данных и имена переменных на основе существующего кода и комментария кода. GitHub Copilot пытается определить, как приложение использует переменные и определяет типы данных соответствующим образом.

    Когда GitHub Copilot создает несколько предложений, вы можете циклировать предложения, выбрав стрелки влево или вправо (>или) слева <". Это позволяет просматривать и выбирать предложения, которые лучше всего соответствуют вашим потребностям.

    Это нормально принять предложение о завершении кода, которое не является точным совпадением для того, что вы хотите. Однако изменения, необходимые для исправления, должны быть понятными. В этом случае некоторые типы данных не нужны, но их можно изменить после принятия предлагаемого автозаполнения.

    Если ни один из предлагаемых вариантов не похож на то, что вам нужно, можно попробовать два способа. Чтобы открыть новую вкладку редактора, содержащую список других предложений, нажмите клавиши CTRL + ВВОД . Эта комбинация горячего ключа открывает новую вкладку, содержащую до 10 дополнительных предложений. За каждым предложением следует кнопка, которую можно использовать для принятия предложения. Вкладка закрывается автоматически после принятия предложения. Другим вариантом является нажатие клавиши ESC , чтобы закрыть предложения и повторить попытку. Вы можете изменить комментарий кода, чтобы обеспечить больше контекста для работы с GitHub Copilot.

    Замечание

    GitHub Copilot может иногда предлагать предложение на этапах. В этом случае можно нажать клавишу ВВОД, чтобы просмотреть дополнительные этапы предложения после нажатия клавиши TAB.

  4. Чтобы принять предлагаемую структуру данных, нажмите клавишу TAB или нажмите кнопку "Принять".

  5. Чтобы изменить типы данных полей, обновите код следующим образом:

    public struct SalesData
    {
        public DateOnly dateSold;
        public string departmentName;
        public int productID;
        public int quantitySold;
        public double unitPrice;
    }
    

    Быстрое изменение предложений по завершению кода помогает гарантировать, что вы создаете нужный код. Особенно важно внести исправления в начале процесса разработки, когда необходимо разработать большую часть базы кода. Завершение кода основано на существующем коде, поэтому важно убедиться, что код является максимально точным.

  6. Создайте две пустые строки кода под структурой SalesData данных.

  7. Чтобы создать метод, который создает тестовые данные с помощью SalesData структуры данных, напишите следующий комментарий кода и нажмите клавишу ВВОД:

    /* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */
    
  8. Просмотрите предложения по завершению кода, предоставляемые GitHub Copilot.

    Обратите внимание, что GenerateSalesData метод предназначен для возврата массива SalesData объектов. Метод создает 1000 записей тестовых данных с случайными значениями, назначенными каждому полю SalesData структуры данных.

    Снимок экрана: завершение кода для комментария, описывающего метод.

    Вы всегда должны просматривать предложения, предлагаемые GitHub Copilot и GitHub Copilot Chat, даже если они выглядят правильными.

    Замечание

    Если GitHub Copilot предлагает одну строку кода, а не завершенный GenerateSalesData метод, нажмите клавиши CTRL + ВВОД , чтобы открыть вкладку предложений GitHub Copilot. Просмотрите предложения на новой вкладке. На следующем шаге нажмите кнопку "Принять предложение #", чтобы принять предложение. GitHub Copilot предоставляет предложения постепенно. Несмотря на то, что вы можете постепенно принимать завершения кода, лучше использовать вкладку предложений GitHub Copilot, чтобы просмотреть полные предложения, прежде чем принимать решение о принятии или отмене.

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

  10. Чтобы принять завершение кода, нажмите клавишу TAB.

    Обратите внимание, что предложение о завершении кода содержит синтаксическую ошибку в коде, используемом DateSold для создания поля. DateOnly принимает три целочисленных значения, которые должны быть указаны в правильном порядке: Year, Month, Day.

  11. Чтобы указать один год для кода, используемого для создания DateSold поля, обновите строку кода следующим образом:

    salesData[i].DateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29));
    
  12. При необходимости измените другие строки кода в соответствии со следующим фрагментом кода:

    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 для создания завершения строки кода, обрабатывающей данные о продажах для ежеквартального отчета.
  • Запустите приложение и просмотрите ежеквартальный отчет о продажах.

Выполните следующие действия, чтобы выполнить этот раздел упражнения:

  1. Обновите конструктор QuarterlySalesReport метода следующим образом:

    public void QuarterlySalesReport(SalesData[] salesData)
    
  2. Запустите минуту, чтобы рассмотреть код, который необходимо разработать.

    Концепция прямо вперед. Вы хотите, чтобы код вычислял ежеквартальные продажи на основе данных о продажах, а затем записывать отчет. Для этого коду необходимо выполнить следующее:

    • Выполните итерацию по salesData коллекции.
    • Вычислите стоимость каждой продажи на основе количества проданных и цены на единицу.
    • Используйте дату продаж, чтобы определить, к какой четверти принадлежит продажа.
    • Суммирует продажи за каждый квартал.
    • Напишите отчет о продажах по кварталу.

    Один из вариантов — начать ввод кода для foreach цикла, а затем увидеть, что предлагает GitHub Copilot.

  3. В методе QuarterlySalesReport создайте новую строку кода в верхней части блока кода.

    Между новой строкой кода и строкой кода, содержащей Console.WriteLine(), должна быть по крайней мере одна пустая строка кода.

  4. Чтобы создать завершение строки кода, введите foreach ( и подождите, пока GitHub Copilot предложит варианты завершения строки кода.

  5. Просмотрите завершение кода, предлагаемое GitHub Copilot.

    Снимок экрана: завершение кода для цикла foreach.

    Предлагаемое завершение кода не является нужным.

    Хотя GitHub Copilot предлагает foreach цикл, который выполняет итерацию через salesDataцикл, нет анализа или вычислений внутри цикла. Предлагаемый код содержит Console.WriteLine операторы, которые вам не нужны или не желательны.

  6. На минуту рассмотрим, почему GitHub Copilot предлагает Console.WriteLine заявления.

    Помните, что GitHub Copilot создает предложения по завершению кода на основе контекста кода. В этом случае у вас нет большого кода для GitHub Copilot. И ситуация ухудшится.

    Код, который GitHub Copilot видит внутри метода, является оператором Console.WriteLine . Без другого контекста, доступного в методе, и никаких аналогичных методов в базе кода для рисования из GitHub Copilot завершается тем, что в цикле могут Console.WriteLineforeach операторы.

    GitHub Copilot лучше всего работает, когда код чист и сосредоточен. Если в коде отображаются лишние комментарии или инструкции кода, их можно удалить, прежде чем использовать завершение кода GitHub Copilot.

  7. Чтобы очистить код перед предоставлением GitHub Copilot еще одну попытку, выполните следующие действия:

    • Отмена предлагаемого foreach ( завершения кода.
    • Удалите введенную часть foreach ( инструкции.
    • Удалите инструкцию Console.WriteLine из QuarterlySalesReport метода.

    Теперь вы должны быть готовы попробовать GitHub Copilot еще раз.

  8. Убедитесь, что метод выглядит примерно так, как QuarterlySalesReport показано в следующем коде:

    public void QuarterlySalesReport(SalesData[] salesData)
    {
    
    
    }
    
  9. Поместите курсор на пустую строку кода внутри QuarterlySalesReport метода, а затем нажмите клавишу ВВОД.

    Для создания предлагаемого завершения кода может потребоваться некоторое время для GitHub Copilot.

  10. Чтобы просмотреть предложенные завершения кода, сделайте минуту.

    Это важно

    Полученные завершения кода, скорее всего, отличаются от предложений, показанных на следующем снимке экрана. Хотя GitHub Copilot имеет только имя метода и параметр для работы, это может быть достаточно для создания полезных предложений. Вы увидите предложения, которые вычисляют продажи по кварталу. Отклонение предложений и повторная попытка могут предоставить различные результаты.

    Снимок экрана: предложение о завершении кода, обрабатывающее данные отчета.

    Вы можете прокрутить предложения, выбрав > или <.

    Обратите внимание, что предлагаемое завершение кода выполняет итерацию данных о продажах и выполняет ежеквартальные вычисления продаж.

  11. Чтобы принять предлагаемое завершение кода, нажмите клавишу 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);
    }
    
    
  12. Обратите внимание, что GetQuarter метод использует месяц продажи для определения квартала продажи.

    Метод GetQuarter создается далее.

  13. Создайте две пустые строки кода под методом QuarterlySalesReport .

  14. Обратите внимание, что GitHub Copilot предлагает завершение кода для GetQuarter метода.

    С помощью контекста, предоставленного QuarterlySalesReport методом, GitHub Copilot может легко создать завершение кода для GetQuarter метода, который определяет квартал на основе месяца продажи.

  15. Просмотрите предлагаемое завершение строки кода для GetQuarter метода.

    Снимок экрана: завершение кода для метода GetQuarter.

  16. Чтобы принять предлагаемое завершение кода, нажмите клавишу 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";
        }
    }
    
  17. Обратите внимание, что Main перед запуском кода необходимо выполнить метод.

    Комментарии в методе Main можно использовать для обновления кода.

  18. Поместите курсор в конец // call the GenerateSalesData method комментария кода и нажмите клавишу ВВОД.

    GitHub Copilot использует комментарий, чтобы предложить оператор вызова для метода.

  19. Просмотрите и примите завершение кода, предлагаемое GitHub Copilot.

  20. Повторите процесс для // call the QuarterlySalesReport method комментария кода.

  21. Метод 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);
    }
    
    
  22. Пройдите минуту, чтобы просмотреть код в 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.

  23. Чтобы просмотреть выходные данные отчета, запустите приложение.

    Откройте окно терминала в Visual Studio Code и введите следующую команду:

    dotnet run
    

    В выходных данных должен отображаться отчет о квартальном доходе, отображающий название отдела, квартал и доход для каждого отдела и квартала, представленный в тестовых данных.

  24. Просмотрите выходные данные в окне терминала.

    Хотя ежеквартальные результаты основаны на случайных числовых значениях, вы увидите отчет, форматированный следующим образом:

    
    Quarterly Sales Report
    ----------------------
    Q3: $635637.5019563352
    Q4: $672247.315297204
    Q2: $667269.194630603
    Q1: $642769.2700531208
    
    

Сводка

Завершение строки кода — это мощная функция GitHub Copilot, которая помогает быстро и эффективно создавать код. Используя примечания для описания создаваемого кода, можно создавать структуры данных, методы и другие элементы кода с минимальными усилиями. Кроме того, GitHub Copilot может создавать завершения строки кода на основе введенного кода, что позволяет легко создавать сложные приложения.