Unidade 2 / 12

Script e preenchimento automático

Ganhos:

  • Capacidade de mapear o modo de bate-papo para corrigir o tipo de tarefa com conclusão in-line
  • Capacidade de escrever prompts de produção poderosos que incluem contratos de entrada/saída, casos extremos e restrições de estilo
  • Capacidade de validar o código gerado e quaisquer novas dependências propostas antes da fusão

O primeiro ponto de contato de um desenvolvedor com a IA geralmente é o preenchimento automático – um recurso que sugere a próxima linha conforme você digita – ou dizer “digite essa função” em uma janela de bate-papo. Ambos usam o mesmo motor, mas exigem disciplinas diferentes. Nesta unidade, transformamos a geração de código de um “escrever” aleatório em uma etapa de engenharia cuja saída é previsível e verificável.

O objetivo é transformar a IA de uma ferramenta que acelera sua máquina de escrever em um aprendiz que trabalha dentro das restrições que você define. Um aprendiz bem orientado economiza tempo; Um aprendiz não guiado produz uma bagunça que você terá que limpar mais tarde.

Dois modos de uso: conclusão inline e bate-papo

A conclusão in-line entra em ação conforme você digita em seu editor; Você digita uma assinatura de função ou uma linha de comentário e ela sugere o resto. É ótimo para velocidade, mas tem um contexto restrito: só vê código na área imediata. É por isso que funciona melhor quando você escreve claramente sua intenção em um comentário. Por exemplo, //validar e-mail do usuário, lançar ValidationError se comentário inválido melhora significativamente a sugestão abaixo.

O modo chat é para tarefas maiores e estruturadas: "Adicionar paginação a esta classe", "Extrair uma interface desse serviço". Aqui você tem o luxo de dar função, contexto e formato. A regra geral é: conclusão de tarefas pequenas e fluidas, conversação para tarefas que exigem raciocínio e estrutura.

Dica: Não aceite cegamente a sugestão de preenchimento com “Tab”. Leia a linha sugerida por um segundo; Um nome de variável incorreto ou uma condição invertida geralmente vaza daqui.

Passos para traduzir a intenção em código

  1. Defina contrato. Qual é o comportamento de entrada, saída e erro da função? Como "Receber e-mail, normalizar se for válido, gerar erro se for inválido".
  2. Indique as restrições. Não use dependência externa? Um guia de estilo específico? Existe um limite de desempenho?
  3. Dê um exemplo. Um par entrada-saída (“ali@x.com → válido, ali@ → erro”) move a compreensão da intenção do modelo da previsão para a precisão.
  4. Peça pedaços pequenos. Uma função, uma responsabilidade. Em seguida, passe para o próximo.
  5. Leia e execute o código gerado. Compilar + uma tentativa manual rápida é a etapa de garantia mais barata.

Três Mini Estojos

Caso 1 – A produção baseada em comentários aumenta a precisão. Um desenvolvedor primeiro solicitou uma função de análise de data com corpo vazio e obteve o resultado correto em 3 rodadas. Na segunda tentativa, quando defini a função com um comentário de 4 linhas (formatos aceitos, regra de fuso horário, condição de erro) e solicitei, veio o código que funcionou na primeira rodada. Mesmo modelo, mesmo dia; a diferença era apenas a clareza de intenção.

Caso 2 — Não especificar uma versão custa caro. Uma equipe teve dificuldades com a API herdada baseada em retorno de chamada, substituindo fs.promises no código produzido para Node.js. Quando a linha "Use Node 20, ESM, async/await" foi adicionada ao prompt, a produção seguiu o projeto pela primeira vez; A média de 12 minutos gastos em correção foi zerada.

Caso 3 — Ganho real em código padrão. Um microsserviço exigia 6 novos DTO (Data Transfer Object – uma classe de dados simples que transporta dados entre camadas) e suas regras de validação. O que costumava ser aproximadamente 90 minutos de trabalho manual foi reduzido para 35 minutos quando produzido e revisado pela IA; Como a repetição de código é alta e o padrão é claro, a IA trabalhou aqui em sua área mais eficiente.

Quatro modelos copiáveis

Geração de função baseada em contrato:

Função: Você é um desenvolvedor diligente de {{idioma}}. Contrato de função: - Nome: {{nome}} - Entrada: {{tipos e seus significados}} - Saída: {{tipo e significado}} - Status do erro: {{o que é lançado/retornado quando}}Restrições: {{sem dependências externas / estilo / desempenho}}Exemplos: - {{input_1}} -> {{output_1}}- {{entry_2}} -> {{error_2}}Forneça primeiro a assinatura + o plano curto e depois o código. Escrevendo testes, apenas funcione.

Para corresponder ao estilo existente (adaptar à base de código):

Abaixo está um exemplo de função do nosso projeto; Aprenda nomenclatura, tratamento de erros e estilo de comentários aqui. Escreva uma função para {{new_task}} com o MESMO estilo. Exemplo: {{código_atual}}

Do esqueleto ao preenchimento (esboço → implementação):

Preencha o esqueleto da função abaixo de acordo com os TODOs nos comentários. ALTERAR a assinatura e o tipo de retorno. Não crie uma função auxiliar que não existe; se necessário, avise-me "este ajudante é necessário". {{skelet_kod}}

Comparação alternativa de aplicativos:

Forneça 2 implementações diferentes para {{task}}: (a) priorizando a legibilidade, (b) priorizando o desempenho. Escreva uma frase “quando for preferível” em cada uma delas.

Alerta fraco / Alerta forte

Fraco: "Escreva-me uma função de verificação de e-mail."
Forte: "TypeScript 5, biblioteca padrão apenas. Escreva isValidEmail (input: string): boolean. Corte espaços, torne-o insensível a maiúsculas e minúsculas, a@b.co é válido, a@, @b.co, string vazia é inválida. Se você for usar regex, não seja excessivamente complexo; adicione 2 linhas de comentários."

Versão poderosa; Retorna o idioma, a versão, a assinatura, os casos extremos e uma restrição de estilo. Assim, o código gerado funciona e se adapta ao seu projeto.

Abordagem

Quando usar

Atenção

Conclusão in-line

Pequenas inserções em fluxo

Não aceite a sugestão sem lê-la

Produção baseada em contrato no chat

Nova função/classe

Dê exemplo e caso extremo

Produção por amostra de estilo

Adicionando ao código existente

Selecione o código de amostra atual

recheio de esqueleto

Assinatura fixa, corpo em branco

Alterando a assinatura

Duplicação de código e armadilha de dependência

A IA frequentemente recomenda uma nova biblioteca para facilitar seu trabalho. Às vezes isso é correto, às vezes adiciona uma dependência desnecessária ao seu projeto ou sugere um pacote que não existe (uma alucinação). Regra: você confirma cada nova dependência. Não o adicione ao projeto sem verificar se o pacote realmente existe, é mantido e possui a licença apropriada. Na maioria das vezes, um helper já presente no projeto é melhor do que um novo pacote.

Cuidado: Revise as linhas de importação sugeridas pela AI. Um nome de pacote inexistente (que também pode se assemelhar a pacotes falsos chamados "typo-squatting") interrompe a compilação e representa um risco à segurança.

Erros comuns

  • Tendo a assinatura determinada pelo modelo. Se você não corrigir os tipos de entrada/saída, uma assinatura diferente surgirá em cada produção e a integração se tornará difícil.
  • Sem mencionar os casos extremos. Entrada vazia, nulo, número negativo, valor muito grande — se você não especificá-los, o modelo escreve o "caminho da felicidade", pulando arestas.
  • Combinando a sugestão sem testá-la. Código que parece funcionar não significa que funciona.
  • Aceitar dependência desnecessária. Adicionar uma biblioteca inteira para uma linha única cria um débito técnico.
  • Inconsistência de estilo. A nomenclatura e o tratamento de erros diferentes do resto do projeto tornam a base de código irregular.

Em resumo

A geração de código é poderosa quando você traduz a intenção em um contrato claro. Use a conclusão in-line para tarefas pequenas e in-stream e para tarefas que estabeleçam estrutura na conversa. Você especifica tipos de entrada/saída, casos extremos, versão e estilo; Dê um exemplo do modelo; verifique cada nova dependência; e corra e leia cada peça produzida. A IA compensa melhor em código estereotipado e repetitivo – execute-o ali mesmo, dentro dos limites que você definir.

Tarefa de aplicativo

Escolha uma pequena função real do seu projeto que você precisa escrever. Primeiro imprima-o na IA com o modelo de “geração de função baseada em contrato”, fornecendo tipos de entrada/saída, dois casos extremos e uma restrição de estilo. Compile o código gerado e teste-o com duas entradas diferentes. Em seguida, pergunte a mesma função novamente, desta vez “escreva-me isto” sem qualquer contexto, e compare as duas saídas linha por linha: quais casos extremos foram perdidos, quantas correções foram necessárias?

lista de verificação

  • [] Eu sei onde usar o modo de bate-papo com conclusão in-line.
  • [] Eu determino o contrato de entrada/saída e casos extremos na geração de funções.
  • [] Adquiri o hábito de adicionar informações de idioma e versão ao prompt.
  • [ ] Compilo e testo cada peça produzida antes de montá-la.
  • [ ] Confirmo cada nova dependência que a IA propõe verificando sua existência e necessidade.
  • [ ] Verifico se o código gerado corresponde ao estilo do projeto.