Enhed 2 / 12

Scripting og Autofuldførelse

Gevinster:

  • Evne til at kortlægge chattilstand til at rette opgavetype med inline-afslutning
  • Evne til at skrive kraftfulde produktionsprompts, der inkluderer input/output kontrakter, edge cases og stilbegrænsninger
  • Evne til at validere genereret kode og eventuelle nye foreslåede afhængigheder før sammenlægning

En udviklers første kontaktpunkt med AI er ofte autofuldførelse - en funktion, der foreslår den næste linje, mens du skriver - eller siger "skriv den funktion" i et chatvindue. De bruger begge den samme motor, men kræver forskellige discipliner. I denne enhed transformerer vi kodegenerering fra en tilfældig "skriv den ned" til et ingeniørtrin, hvis output er forudsigeligt og verificerbart.

Målet er at forvandle AI fra et værktøj, der fremskynder din skrivemaskine til en lærling, der arbejder inden for de begrænsninger, du sætter. En velguidet lærling sparer tid; En uvejledt lærling producerer et rod, som du skal rydde op senere.

To brugstilstande: Inline afslutning og chat

Inline afslutning kommer i spil, mens du skriver i din editor; Du skriver en funktionssignatur eller en kommentarlinje, og den foreslår resten. Den er fantastisk til hastighed, men den har en snæver sammenhæng: den ser kun kode i umiddelbar nærhed. Derfor fungerer det bedst, når du skriver din hensigt tydeligt i en kommentar. For eksempel, //validate user email, throw ValidationError if ugyldig kommentar forbedrer forslaget nedenfor markant.

Chattilstand er til større og strukturerede opgaver: "Tilføj paginering til denne klasse", "Udtræk en grænseflade for den tjeneste". Her har du den luksus at give rolle, sammenhæng og format. Hovedreglen er: afslutning ved små og flydende opgaver, samtale ved opgaver, der kræver omtanke og struktur.

Tip: Accepter ikke blindt færdiggørelsesforslaget med "Tab". Læs den foreslåede linje et øjeblik; Et forkert variabelnavn eller en omvendt tilstand lækker oftest herfra.

Trin til at oversætte hensigt til kode

  1. Definer kontrakt. Hvad er funktionens input, output og fejladfærd? Som "Få e-mail, normaliser hvis gyldig, smid fejl hvis ugyldig".
  2. Angiv begrænsningerne. Bruger du ikke ekstern afhængighed? En specifik stilguide? Er der en præstationsgrænse?
  3. Giv et eksempel. Et input-output-par ("ali@x.com → valid, ali@ → error") flytter modellens forståelse af hensigten fra forudsigelse til præcision.
  4. Spørg efter små stykker. Én funktion, ét ansvar. Gå derefter videre til den næste.
  5. Læs og kør den genererede kode. Kompilering + et hurtigt manuel forsøg er det billigste sikkerhedstrin.

Tre mini etuier

Case 1 — Kommentar-drevet produktion øger nøjagtigheden. En udvikler anmodede først om en datoparsing-funktion med en tom krop og fik det korrekte resultat i 3 runder. I andet forsøg, da jeg definerede funktionen med en 4-linjers kommentar (accepterede formater, tidszoneregel, fejltilstand) og bad om den, kom koden, der virkede i første runde. Samme model, samme dag; forskellen var kun hensigtens klarhed.

Case 2 — Det er dyrt at ikke angive en version. Et team kæmpede med den ældre callback-baserede API, der erstattede fs.promises i kode produceret til Node.js. Da linjen "Brug Node 20, ESM, async/await" blev tilføjet til prompten, fulgte produktionen projektet første gang; Gennemsnittet af 12 minutter brugt på korrektion blev nulstillet.

Tilfælde 3 — Reel gevinst i boilerplate-kode. En mikrotjeneste krævede 6 nye DTO (Data Transfer Object — en simpel dataklasse, der bærer data mellem lag) og deres valideringsregler. Det, der plejede at være cirka 90 minutters manuelt arbejde, blev reduceret til 35 minutter, når det blev produceret og gennemgået af AI; Da kodegentagelsen er høj, og mønsteret er klart, arbejdede AI på sit mest effektive område her.

Fire kopierbare skabeloner

Kontraktbaseret funktionsgenerering:

Rolle: Du er en flittig {{sprog}}-udvikler.Funktionskontrakt:- Navn: {{navn}}- Input: {{typer og deres betydning}}- Output: {{type og betydning}}- Fejlstatus: {{hvad bliver kastet/returneret når}}Begrænsninger: {{ingen eksterne afhængigheder/stile/performance:{}->Eksempler: {{output_1}}- {{entry_2}} -> {{error_2}}Giv først signatur + kort plan og derefter kode. Skrive prøver, bare funktion.

For at matche eksisterende stil (tilpasning til kodebase):

Nedenfor er et eksempel på en funktion fra vores projekt; Lær navngivning, fejlhåndtering og kommentarstil her. Skriv en funktion til {{ny_opgave}} med den SAMME stil. Eksempel: {{current_code}}

Fra skelet til fyldning (stub → implementering):

Udfyld funktionsskelettet nedenfor i henhold til TODO'erne i kommentarerne. SKIFT signatur og returtype. Lav ikke en hjælpefunktion, der ikke eksisterer; hvis det er nødvendigt, lad mig vide "denne hjælper er nødvendig". {{skelet_kod}}

Alternativ app sammenligning:

Giv 2 forskellige implementeringer til {{opgave}}: (a) prioritering af læsbarhed, (b) prioritering af ydeevne. Skriv 1 sætning "hvornår er at foretrække" ned under hver.

Svag prompt / Stærk prompt

Svag: "Skriv mig en e-mailbekræftelsesfunktion."
Stærk: "TypeScript 5, kun standardbibliotek. Skriv isValidEmail(input: streng): boolean. Trim mellemrum, gør det ufølsomt for store og små bogstaver, a@b.co er gyldig, a@, @b.co, tom streng er ugyldig. Hvis du vil bruge regulært udtryk, skal du ikke være alt for kompleks; tilføj 2 linjer med kommentarer."

Kraftig version; Returnerer sproget, versionen, signaturen, kantsager og en stilbegrænsning. Den genererede kode både fungerer og passer ind i dit projekt.

tilgang

Hvornår skal bruges

Opmærksomhed

Inline færdiggørelse

Små skær i flow

Accepter ikke forslaget uden at læse det

Kontraktbaseret produktion i chat

Ny funktion/klasse

Giv eksempel og kantkasse

Produktion efter stilprøve

Tilføjelse til eksisterende kode

Vælg den aktuelle prøvekode

skeletfyld

Signatur fast, krop blank

Ændring af signatur

Kodeduplikering og afhængighedsfælden

AI anbefaler ofte et nyt bibliotek for at gøre dets arbejde lettere. Nogle gange er dette nøjagtigt, nogle gange tilføjer det en unødvendig afhængighed til dit projekt eller foreslår en pakke, der ikke eksisterer (en hallucination). Regel: du bekræfter hver ny afhængighed. Tilføj det ikke til projektet uden at bekræfte, at pakken faktisk eksisterer, vedligeholdes og har den relevante licens. Det meste af tiden er en hjælper, der allerede er i projektet, bedre end en ny pakke.

Forsigtig: Gennemgå importlinjerne foreslået af AI. Et ikke-eksisterende pakkenavn (som også kan minde om falske pakker kaldet "typo-squatting") både bryder kompileringen og udgør en sikkerhedsrisiko.

Almindelige fejl

  • At have signaturen bestemt af modellen. Hvis du ikke fikser input/output-typerne, kommer der en anden signatur med hver produktion, og integrationen bliver vanskelig.
  • For ikke at tale om kantsager. Tom input, null, negativt tal, meget stor værdi — hvis du ikke angiver disse, skriver modellen den "glade vej" og springer kanter over.
  • Kombinerer forslaget uden at teste det. Kode, der ser ud til at virke, betyder ikke, at det virker.
  • Accepter unødvendig afhængighed. Tilføjelse af et helt bibliotek til en one-liner skaber teknisk gæld.
  • Stilinkonsekvens. En anden navngivning og fejlhåndtering fra resten af ​​projektet gør kodebasen usammenhængende.

Sammenfattende

Kodegenerering er kraftfuld, når du omsætter hensigt til en klar kontrakt. Brug inline afslutning til små, in-stream opgaver og til opgaver, der etablerer struktur i samtalen. Du angiver input/output-typer, kanttilfælde, version og stil; Giv et eksempel på modellen; verificere hver ny afhængighed; og løb og læs hvert produceret stykke. AI betaler sig bedst i formel, gentagne kode - kør den lige der, inden for de grænser, du angiver.

Ansøgningsopgave

Vælg en egentlig lille funktion fra dit projekt, som du skal skrive. Udskriv det først til AI med skabelonen "kontraktbaseret funktionsgenerering", der giver input/output-typer, to kant-cases og en stilbegrænsning. Kompiler den genererede kode og prøv den med to forskellige input. Spørg så den samme funktion igen, denne gang "skriv mig det her" uden nogen kontekst, og sammenlign de to udgange linje for linje: hvilke kanttilfælde blev savnet, hvor mange rettelser var nødvendige?

tjekliste

  • [ ] Jeg ved, hvor jeg skal bruge chattilstand med inline-afslutning.
  • [ ] Jeg bestemmer input/output kontrakt og kanttilfælde i funktionsgenerering.
  • [ ] Jeg har gjort det til en vane at tilføje sprog- og versionsoplysninger til prompten.
  • [ ] Jeg kompilerer og tester hvert produceret stykke inden jeg samler det.
  • [ ] Jeg bekræfter hver ny afhængighed, som AI foreslår ved at verificere dens eksistens og nødvendighed.
  • [ ] Jeg tjekker, at den genererede kode passer til projektets stil.