Generér kode ved hjælp af forslag til fuldførelse af GitHub Copilot-kode
GitHub Copilot kan levere forslag til fuldførelse af kode for mange programmeringssprog og en lang række strukturer, men fungerer især godt for Python, JavaScript, TypeScript, Ruby, Go, C# og C++. Fuldførelse af kodelinje genereres på baggrund af konteksten for den kode, du skriver. Du kan acceptere, afvise eller delvist acceptere forslagene fra GitHub Copilot.
GitHub Copilot giver to måder at generere fuldførelser af kodelinje på:
Fra en kommentar: Du kan generere fuldførelser af kodelinjen ved at skrive en kommentar, der beskriver den kode, du vil generere. GitHub Copilot indeholder forslag til fuldførelse af kode baseret på den kommentar, du skriver.
Fra kode: Du kan generere fuldførelser af kodelinjen ved at starte en kodelinje eller ved at trykke på Enter efter en fuldført kodelinje. GitHub Copilot indeholder forslag til fuldførelse af kode baseret på den kode, du skriver.
Brug GitHub Copilot til at generere fuldførelser af kodelinjen ud fra en kommentar
GitHub Copilot genererer forslag til fuldførelse af kode baseret på kommentaren og den eksisterende kontekst for din app.
Du kan bruge kommentarer til at beskrive kodestykker, metoder, datastrukturer og andre kodeelementer.
Antag, at du har følgende kodestykke:
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");
}
}
Følgende kommentar kan f.eks. bruges til at oprette en datastruktur:
// public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit price
GitHub Copilot genererer et eller flere forslag til fuldførelse af kode baseret på din kodekommentar og de kodefiler, der er åbne i editoren.
Bemærk de datatyper, der bruges til at deklarere felterne i datastrukturen. GitHub Copilot vælger datatyper og variabelnavne baseret på din eksisterende kode og kodekommentaren. GitHub Copilot forsøger at bestemme, hvordan programmet bruger variabler, og definerer datatyperne i overensstemmelse hermed.
Når GitHub Copilot genererer mere end ét forslag, kan du gennemgå forslagene ved at vælge venstre eller højre pil (> eller <), der er placeret til venstre for knappen Acceptér. Dette giver dig mulighed for at gennemse og vælge det forslag, der passer bedst til dine behov.
Det er i orden at acceptere et forslag til kodefuldførelse, der ikke stemmer nøjagtigt overens med det, du ønsker. Men de ændringer, der kræves for at "løse" forslaget, skal være tydelige. I dette tilfælde er nogle af datatyperne ikke, som du ønsker, men du kan justere dem, når du har accepteret den foreslåede autofuldførelse.
Hvis ingen af de foreslåede indstillinger ligner det, du har brug for, er der to ting, du kan prøve. Hvis du vil åbne en ny editorfane, der indeholder en liste over andre forslag, skal du trykke på Ctrl + Enter taster. Denne kombination af genvejstaster åbner en ny fane, der indeholder op til 10 forslag mere. Hvert forslag efterfølges af en knap, som du kan bruge til at acceptere forslaget. Fanen lukkes automatisk, når du har accepteret et forslag. Din anden mulighed er at trykke på tasten Esc for at afvise forslagene og prøve igen. Du kan justere kodekommentaren for at give mere kontekst, som GitHub Copilot kan arbejde med.
Seddel
GitHub Copilot kan undertiden foreslå et forslag i faser. Hvis dette sker, kan du trykke på Enter for at få vist flere faser i forslaget, når du har trykket på tabulatortasten.
Hvis du vil acceptere en foreslået datastruktur, skal du trykke på tabulatortasten eller vælge Acceptér.
Hvis du vil ændre feltdatatyperne, skal du opdatere din kode på følgende måde:
public struct SalesData
{
public DateOnly dateSold;
public string departmentName;
public int productID;
public int quantitySold;
public double unitPrice;
}
Hurtig justering af forslag til kodefuldførelse hjælper med at sikre, at du opretter den ønskede kode. Det er især vigtigt at foretage rettelser tidligt i din udviklingsproces, når store dele af din kodebase stadig skal udvikles. Efterfølgende kodefuldførelser er baseret på den kode, du allerede har skrevet, så det er vigtigt at sikre, at din kode er så nøjagtig som muligt.
Brug GitHub Copilot til at generere fuldførelser af kodelinjen ud fra en kommentar
GitHub Copilot genererer forslag til fuldførelse af kode baseret på kommentaren og den eksisterende kontekst for din app. Du kan bruge kommentarer til at beskrive kodestykker, metoder, datastrukturer og andre kodeelementer.
Brug følgende trin til at fuldføre dette afsnit i øvelsen:
Opret to tomme kodelinjer under metoden i den
Mainfil.Hvis du vil oprette en datastruktur, der kan bruges til at generere testdata, skal du oprette følgende kodekommentar og derefter trykke på Enter:
// public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit priceGitHub Copilot genererer et eller flere forslag til fuldførelse af kode baseret på din kodekommentar og eventuel eksisterende kode, som den finder i din app.
Brug et øjeblik på at gennemse forslagene til fuldførelse af koden fra GitHub Copilot.
Seddel
Hvis GitHub Copilot genererer forslag til en metode i stedet for en datastruktur, skal du skrive offentlige str og vente på, at forslaget til kodefuldførelse opdateres. GitHub Copilot bruger de yderligere oplysninger til at forbedre sine forslag.
Bemærk de datatyper, der bruges til at deklarere felterne i datastrukturen. GitHub Copilot vælger datatyper og variabelnavne baseret på din eksisterende kode og kodekommentaren. GitHub Copilot forsøger at bestemme, hvordan programmet bruger variabler, og definerer datatyperne i overensstemmelse hermed.
Når GitHub Copilot genererer mere end ét forslag, kan du gennemgå forslagene ved at vælge venstre eller højre pil (
>eller<), der er placeret til venstre for knappen Acceptér. Dette giver dig mulighed for at gennemse og vælge det forslag, der passer bedst til dine behov.Det er i orden at acceptere et forslag til kodefuldførelse, der ikke stemmer nøjagtigt overens med det, du ønsker. Men de ændringer, der kræves for at "løse" forslaget, skal være tydelige. I dette tilfælde er nogle af datatyperne ikke, som du ønsker, men du kan justere dem, når du har accepteret den foreslåede autofuldførelse.
Hvis ingen af de foreslåede indstillinger ligner det, du har brug for, er der to ting, du kan prøve. Hvis du vil åbne en ny editorfane, der indeholder en liste over andre forslag, skal du trykke på Ctrl + Enter taster. Denne kombination af genvejstaster åbner en ny fane, der indeholder op til 10 forslag mere. Hvert forslag efterfølges af en knap, som du kan bruge til at acceptere forslaget. Fanen lukkes automatisk, når du har accepteret et forslag. Din anden mulighed er at trykke på tasten Esc for at afvise forslagene og prøve igen. Du kan justere kodekommentaren for at give mere kontekst, som GitHub Copilot kan arbejde med.
Seddel
GitHub Copilot kan undertiden foreslå et forslag i faser. Hvis dette sker, kan du trykke på Enter for at få vist flere faser i forslaget, når du har trykket på tabulatortasten.
Hvis du vil acceptere en foreslået datastruktur, skal du trykke på tabulatortasten eller vælge Acceptér.
Hvis du vil ændre feltdatatyperne, skal du opdatere din kode på følgende måde:
public struct SalesData { public DateOnly dateSold; public string departmentName; public int productID; public int quantitySold; public double unitPrice; }Hurtig justering af forslag til kodefuldførelse hjælper med at sikre, at du opretter den ønskede kode. Det er især vigtigt at foretage rettelser tidligt i din udviklingsproces, når store dele af din kodebase stadig skal udvikles. Kodefuldførelser er baseret på din eksisterende kode, så det er vigtigt at sikre, at din kode er så nøjagtig som muligt.
Opret to tomme kodelinjer under den
SalesDatadatastruktur.Hvis du vil oprette en metode, der genererer testdata ved hjælp af datastrukturen
SalesData, skal du skrive følgende kodekommentar og derefter trykke på Enter:/* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */Brug et øjeblik på at gennemse forslagene til fuldførelse af koden fra GitHub Copilot.
Bemærk, at metoden
GenerateSalesDataer designet til at returnere en matrix afSalesDataobjekter. Metoden genererer 1.000 poster med testdata, hvor der tildeles tilfældige værdier til hvert felt iSalesDatadatastrukturen.
Du bør altid gennemse de forslag, der er foreslået af GitHub Copilot og GitHub Copilot Chat, selv når de ser ud til at være korrekte.
Seddel
Hvis GitHub Copilot foreslår en enkelt kodelinje i stedet for en fuldført
GenerateSalesDatametode, skal du trykke på Ctrl + Enter for at åbne fanen Forslag til GitHub Copilot. Gennemse forslagene under den nye fane. På næste trin skal du bruge knappen "Acceptér forslag #" til at acceptere forslaget. GitHub Copilot præsenterer nogle gange forslag trinvist. Selvom du kan acceptere fuldførelsen af koden trinvist, er det bedre at bruge fanen GitHub Copilot-forslag til at gennemse det fulde forslag, før du beslutter dig for at acceptere eller kassere.Rul gennem forslag til kodefuldførelse, og vælg det bedste match for kravene.
Tryk på tabulatortasten for at acceptere kodefuldførelsen.
Bemærk, at forslaget til kodefuldførelse indeholder en syntaksfejl i den kode, der bruges til at generere feltet
DateSold.DateOnlyaccepterer tre heltalsværdier, der skal angives i den korrekte rækkefølge: Year, Month, Day.Hvis du vil angive et enkelt år for den kode, der bruges til at generere feltet
DateSold, skal du opdatere kodelinjen på følgende måde:salesData[i].DateSold = new DateOnly(2023, random.Next(1, 13), random.Next(1, 29));Hvis det er nødvendigt, skal du justere de andre kodelinjer, så de stemmer overens med følgende kodestykke:
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; }
Muligheden for at generere kode fra kodekommentarer er en effektiv funktion i GitHub Copilot. Med kun to kommentarer kunne du oprette en datastruktur og en metode, der genererer testdata.
Brug GitHub Copilot til at generere fuldførelser af kodelinje
GitHub Copilot kan generere fuldførelser af kodelinje baseret på den kode, du angiver. Du kan generere fuldførelser af kodelinjen på to måder:
- Begynd at angive en kodelinje, og vent derefter på, at GitHub Copilot foreslår en automatisk fuldførelse af din ikke-færdigbehandlede kodelinje.
- Angiv en komplet kodelinje, tryk på tasten Enter, og vent derefter på, at GitHub Copilot foreslår en autofuldførelse for den næste kodelinje.
Seddel
GitHub Copilot genererer foreslåede kodefuldførelser baseret på den kode, du angiver, og den kontekst, der er defineret af koden i din app. Jo mere kode, du har tilgængelig i din app, jo mere kontekst har GitHub Copilot, når der genereres et svar. GitHub Copilot kan basere svar på din eksisterende kode, så kvaliteten af din kode er vigtig. I takt med at mængden og kvaliteten af eksisterende kode øges, øges kvaliteten og pålideligheden af de fuldførelser af kodelinjen, der foreslås af GitHub Copilot. GitHub Copilot er god til at generere fuldførelser af kodelinje for almindelige programmeringsopgaver og -mønstre, især når der skal genereres en sekvens af relaterede komponenter.
I denne del af øvelsen arbejder du på metoden QuarterlySalesReport.
Her er de opgaver, du skal udføre:
- Opdater metodekonstruktøren med en parameter, der accepterer din samling af
SalesDataobjekter. - Brug GitHub Copilot til at generere fuldførelser af kodelinje, der behandler salgsdata for kvartalsrapporten.
- Kør appen, og gennemse kvartalssalgsrapporten.
Brug følgende trin til at fuldføre dette afsnit i øvelsen:
Opdater metodekonstruktøren for
QuarterlySalesReportpå følgende måde:public void QuarterlySalesReport(SalesData[] salesData)Brug et øjeblik på at overveje den kode, du skal udvikle.
Konceptet er ligetil. Koden skal beregne kvartalsvise salg baseret på dine salgsdata og derefter skrive en rapport. Hvis du vil gøre det, skal din kode:
- Gentage gennem samlingen
salesData. - Beregn værdien af hvert salg baseret på det solgte antal og enhedsprisen.
- Brug salgsdatoen til at bestemme, hvilket kvartal et salg tilhører.
- Sammenfat salget for hvert kvartal.
- Skriv en rapport over salget efter kvartal.
En mulighed er at begynde at angive koden for en
foreachløkke og derefter se, hvad GitHub Copilot foreslår.- Gentage gennem samlingen
I metoden
QuarterlySalesReportskal du oprette en ny kodelinje øverst i kodeblokken.Der skal være mindst én tom kodelinje mellem den nye kodelinje og den kodelinje, der indeholder
Console.WriteLine().Hvis du vil generere en fuldførelse af en kodelinje, skal du skrive
foreach (og derefter vente på, at GitHub Copilot foreslår indstillinger for fuldførelse af kodelinje.Gennemse den kodefuldførelse, der foreslås af GitHub Copilot.
Den foreslåede kodefuldførelse er ikke det, du ønsker.
Selvom GitHub Copilot foreslår en
foreachløkke, der gentages viasalesData, er der ingen analyser eller beregninger i løkken. Den foreslåede kode indeholderConsole.WriteLinesætninger, som du ikke ønsker eller har brug for.Brug et øjeblik på at overveje, hvorfor GitHub Copilot foreslår
Console.WriteLineudsagn.Husk, at GitHub Copilot genererer forslag til fuldførelse af kode baseret på konteksten af din kode. I dette tilfælde har du ikke rigtig meget kode til GitHub Copilot at overveje. Og situationen bliver værre.
Den kode, som GitHub Copilot ser i din metode, er en
Console.WriteLinesætning. Da der ikke er nogen anden kontekst tilgængelig i metoden og ingen lignende metoder i din kodebase at trække fra, konkluderer GitHub Copilot, at du måske vil haveConsole.WriteLine-sætninger iforeach-løkken.GitHub Copilot fungerer bedst, når din kode er ren og fokuseret. Hvis du får vist overflødige kodekommentarer eller -sætninger i din kode, kan du fjerne dem, før du forsøger at bruge fuldførelse af GitHub Copilot-kode.
Hvis du vil rydde op i din kode, før du giver GitHub Copilot endnu et forsøg, skal du udføre følgende trin:
- Annuller den foreslåede
foreach (kodefuldførelse. - Slet den delvise
foreach (sætning, du har angivet. - Slet
Console.WriteLine-sætningen fra dinQuarterlySalesReport-metode.
Nu skal du være klar til at prøve GitHub Copilot igen.
- Annuller den foreslåede
Sørg for, at din
QuarterlySalesReport-metode ligner følgende kode:public void QuarterlySalesReport(SalesData[] salesData) { }Placer markøren på en tom kodelinje i metoden
QuarterlySalesReport, og tryk derefter på Enter.Det kan tage et øjeblik for GitHub Copilot at generere den foreslåede kodefuldførelse.
Brug et øjeblik på at gennemse de foreslåede kodefuldførelser.
Vigtigt
De kodefuldførelser, du modtager, er sandsynligvis forskellige fra de forslag, der vises på følgende skærmbillede. Selvom GitHub Copilot kun har et metodenavn og en parameter at arbejde med, kan det være nok til at generere nyttige forslag. Du bør se forslag, der beregner salg efter kvartal. Hvis du afviser forslagene og prøver igen, kan det give forskellige resultater.
Du kan gennemgå forslagene ved at vælge
>eller<.Bemærk, at den foreslåede kodefuldførelse gentages via salgsdataene og udfører kvartalsvise salgsberegninger.
Tryk på tabulatortasten for at acceptere den foreslåede kodefuldførelse.
Den foreslåede kodefuldførelse beregner og viser kvartalsresultatet baseret på salgsdata.
// 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); }Bemærk, at metoden
GetQuarterbruger måneden for salget til at bestemme salgets kvartal.Metoden
GetQuarteroprettes derefter.Opret to tomme kodelinjer under metoden
QuarterlySalesReport.Bemærk, at GitHub Copilot foreslår en kodefuldførelse for metoden
GetQuarter.Med den kontekst, der leveres af metoden
QuarterlySalesReport, kan GitHub Copilot nemt generere en kodefuldførelse for denGetQuartermetode, der bestemmer kvartalet baseret på måneden for salget.Brug et minut på at gennemse den foreslåede fuldførelse af kodelinjen for metoden
GetQuarter.
Tryk på tabulatortasten for at acceptere den foreslåede kodefuldførelse.
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"; } }Bemærk, at metoden
Mainskal fuldføres, før du kan køre koden.Du kan bruge kommentarerne i metoden
Maintil at opdatere din kode.Placer markøren i slutningen af
// call the GenerateSalesData methodkodekommentar, og tryk derefter på Enter.GitHub Copilot bruger kommentaren til at foreslå en kaldsætning for metoden.
Gennemse og acceptér derefter den kodefuldførelse, der foreslås af GitHub Copilot.
Gentag processen for
// call the QuarterlySalesReport methodkodekommentar.Metoden
Mainskal indeholde følgende kode: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); }Brug et øjeblik på at gennemse koden i din
QuarterlyIncomeReportklasse.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"; } } } }Denne kode blev næsten udelukkende oprettet ved hjælp af fuldførelse af kodelinjen, der er genereret af GitHub Copilot. Din gennemgang af kodeforslag er dog vigtig, og der kræves rettelser. Du bør altid gennemse de kodefuldførelser, der foreslås af GitHub Copilot, for at sikre, at koden opfylder dine krav.
Kør appen for at gennemse rapportoutputtet.
Åbn et terminalvindue i Visual Studio Code, og angiv derefter følgende kommando:
dotnet runOutputtet skal vise den kvartalsvise indkomstrapport, der viser afdelingens navn, kvartal og indkomst for hver afdeling og hvert kvartal, der er repræsenteret i testdataene.
Gennemse outputtet i vinduet Terminal.
Selvom kvartalsresultaterne er baseret på tilfældige numeriske værdier, kan du se en rapport, der er formateret på samme måde som følgende output:
Quarterly Sales Report ---------------------- Q3: $635637.5019563352 Q4: $672247.315297204 Q2: $667269.194630603 Q1: $642769.2700531208
Resumé
Fuldførelse af kodelinje er en effektiv funktion i GitHub Copilot, der kan hjælpe dig med at generere kode hurtigt og effektivt. Når du bruger kommentarer til at beskrive den kode, du vil generere, kan du oprette datastrukturer, metoder og andre kodeelementer med en minimal indsats. Derudover kan GitHub Copilot generere fuldførelser af kodelinje baseret på den kode, du angiver, så du nemt kan bygge komplekse programmer.