Pular para o conteúdo
AI Coding

Como Escrever Prompts para Codigo: 20

Eu testei centenas de prompts pra gerar codigo com IA ao longo do ultimo ano. Esses 20 sao os que consistentemente dao resultados bons. Copie, adapte pro seu

TL;DR

Como Escrever Prompts para Codigo: 20. Eu testei centenas de prompts pra gerar codigo com IA ao longo do ultimo ano. Esses 20 sao os que consistentemente dao resultados bons. Copie, adapte pro seu stack e use.

A anatomia de um prompt bom para codigo

Antes dos templates, voce precisa entender por que alguns prompts funcionam e outros nao. A diferenca entre 'arruma esse codigo' e um prompt que gera resultado util nao e magica. E estrutura.

Todo prompt bom pra codigo tem 4 elementos. Nem sempre voce precisa dos 4, mas quanto mais voce incluir, melhor o resultado.

Contexto + Instrucao + Formato + Restricoes

  1. Contexto: o que o codigo faz, qual a stack, qual o padrao do projeto. Ex: 'Este e um servico Express com TypeScript que gerencia pedidos'
  2. Instrucao: o que voce quer que a IA faca. Seja especifico. 'Refatore extraindo a validacao pra um middleware separado' e melhor que 'melhore esse codigo'
  3. Formato: como voce quer o resultado. Ex: 'Retorne apenas o codigo, sem explicacao' ou 'Explique cada mudanca em comentarios'
  4. Restricoes: o que a IA nao deve fazer. Ex: 'Nao mude a interface publica', 'Nao adicione dependencias novas', 'Mantenha compatibilidade com Node 18'

Vou dar um exemplo concreto. Esse prompt ruim gera resultado generico:

plaintext
Melhore esse codigo

E esse prompt com estrutura gera resultado utilizavel:

plaintext
[Contexto] Este e um handler Express em TypeScript que processa pagamentos via Stripe.

[Instrucao] Refatore extraindo a validacao de input para um middleware Zod separado,
e a logica de negocio para um PaymentService.

[Formato] Retorne 3 arquivos: middleware, service e handler refatorado.
Inclua imports completos.

[Restricoes] Mantenha a mesma rota e response format.
Nao mude o schema do Stripe. Use injecao de dependencia no service.

A diferenca no resultado e absurda. O primeiro vai te dar sugestoes vagas. O segundo vai te dar codigo pronto pra usar.

Templates de refatoracao

Refatoracao e onde a IA mais brilha porque o comportamento esperado ja existe. Voce quer o mesmo resultado com codigo melhor. Aqui vao 5 templates que eu uso toda semana.

Template 1: Extrair logica para service

plaintext
Refatore [ARQUIVO] extraindo toda a logica de negocio para um service separado.

Regras:
- O handler/controller deve ficar so com parse de input, chamada do service e response
- O service deve ser uma classe com metodos tipados
- Use injecao de dependencia para repositorios/clients externos
- Mantenha o mesmo comportamento e response format
- Inclua tipos TypeScript para todos os parametros e retornos

Stack: [SUA_STACK]

Template 2: Quebrar funcao gigante

plaintext
Esta funcao tem [X] linhas e faz muitas coisas. Quebre em funcoes menores.

Regras:
- Cada funcao deve ter uma unica responsabilidade
- Nomes descritivos que explicam o que a funcao faz
- A funcao original deve virar uma orquestradora que chama as menores
- Mantenha a mesma interface publica (parametros e retorno)
- Adicione tipos TypeScript em cada funcao nova

Template 3: Converter callback para async/await

plaintext
Converta este codigo de callbacks/promises encadeadas para async/await.

Regras:
- Mantenha o tratamento de erro equivalente (try/catch onde tinha .catch)
- Nao mude a logica, apenas a sintaxe
- Se houver operacoes paralelas, use Promise.all
- Adicione tipagem nos retornos das funcoes async

Template 4: Eliminar duplicacao

plaintext
Esses [N] arquivos tem logica duplicada. Identifique o codigo repetido e extraia
para funcoes/classes compartilhadas.

Regras:
- Crie um arquivo utils ou shared com as funcoes extraidas
- Mantenha a flexibilidade: use parametros para as diferencas entre os usos
- Nao force DRY onde a duplicacao e acidental (codigos parecidos mas com motivos diferentes)
- Atualize todos os arquivos originais para usar as funcoes compartilhadas

Template 5: Adicionar tipagem TypeScript

plaintext
Adicione tipagem TypeScript completa neste arquivo JavaScript.

Regras:
- Infira tipos dos valores quando possivel
- Crie interfaces para objetos complexos
- Use generics onde fizer sentido
- Nunca use 'any' - use 'unknown' se nao souber o tipo
- Mantenha o mesmo comportamento, apenas adicione tipos
- Coloque interfaces e types no topo do arquivo ou num arquivo .d.ts separado

Templates de geracao de testes

Gerar testes com IA e fantastico quando voce da contexto suficiente. Sem contexto, a IA gera testes triviais que testam se 1+1 e 2. Com contexto, ela gera testes que realmente pegam bugs.

Template 6: Testes unitarios completos

plaintext
Crie testes unitarios para [ARQUIVO/CLASSE/FUNCAO].

Cubra:
- Cenario feliz (happy path) com dados validos
- Inputs invalidos (null, undefined, string vazia, numero negativo)
- Edge cases (lista vazia, item unico, valores no limite)
- Erros esperados (throws, rejects)

Stack: Jest + TypeScript
Padrao: describe > it, nomes em portugues
Mock: use jest.mock() para dependencias externas
Nao teste implementacao interna, teste comportamento

Template 7: Testes de integracao para API

plaintext
Crie testes de integracao para o endpoint [ROTA].

Cubra:
- Request valido retorna status [200/201] com body correto
- Request sem autenticacao retorna 401
- Request com body invalido retorna 400 com mensagem clara
- Request para recurso inexistente retorna 404
- Request com dados duplicados retorna 409

Stack: Jest + Supertest
Setup: use beforeAll para criar dados de teste, afterAll para limpar
Database: use banco de teste separado ou transactions com rollback

Template 8: Testes de componente React

plaintext
Crie testes para o componente [COMPONENTE].

Cubra:
- Renderiza sem crash com props obrigatorias
- Exibe texto/dados corretos baseado nas props
- Eventos de click/change disparam as funcoes corretas
- Estado condicional: loading, erro, vazio, com dados
- Acessibilidade: elementos tem roles e labels corretos

Stack: React Testing Library + Jest
Padrao: teste o que o usuario ve, nao a implementacao
Nao use: enzyme, shallow rendering, snapshot tests

Template 9: Adicionar testes em codigo legado

plaintext
Este codigo legado nao tem testes. Adicione testes SEM refatorar o codigo.

Abordagem:
1. Identifique os inputs e outputs publicos
2. Crie testes que documentam o comportamento atual (characterization tests)
3. Cubra os paths mais arriscados primeiro (pagamentos, auth, dados sensiveis)
4. Mocke dependencias externas de forma simples
5. Se o codigo e dificil de testar, documente por que num comentario

Objetivo: criar uma rede de seguranca para refatoracao futura
Nao tente 100% coverage, foque em 80% dos paths criticos

Template 10: Gerar test data e fixtures

plaintext
Crie factories e fixtures para os modelos do projeto.

Modelos: [LISTA_DE_MODELOS]

Regras:
- Use factory pattern: funcao que retorna objeto com valores default
- Permita override de qualquer campo via parametro
- Dados realistas (nomes, emails, datas plausíveis)
- IDs sequenciais ou UUID
- Relacionamentos: factory de pedido inclui factory de cliente

Exemplo de uso esperado:
const user = createUser({ name: 'Joao' })
const order = createOrder({ userId: user.id })

Templates de debug e fix

Debug e o cenario mais frustrante pra escrever prompts porque voce muitas vezes nao sabe exatamente o que ta errado. Esses templates ajudam a IA a investigar de forma sistematica em vez de chutar solucoes.

Template 11: Investigar erro com stack trace

plaintext
Este erro esta acontecendo em producao:

[COLE O STACK TRACE COMPLETO]

Contexto:
- Acontece quando [DESCREVA A ACAO DO USUARIO]
- Comecou a acontecer depois de [ULTIMA MUDANCA RELEVANTE]
- Frequencia: [SEMPRE / AS VEZES / RARO]

Investigue:
1. Qual a causa raiz (nao o sintoma)?
2. Onde no codigo esta o problema?
3. Qual o fix com menor risco?
4. Tem algum edge case que pode causar o mesmo erro de outra forma?

Template 12: Fix de performance

plaintext
Esta funcao/query/pagina esta lenta. Tempo atual: [X ms/s].
Tempo aceitavel: [Y ms/s].

[COLE O CODIGO]

Analise:
1. Onde estao os gargalos?
2. Tem N+1 query? Loop desnecessario? Calculo repetido?
3. O que pode ser cacheado?
4. O que pode ser paralelizado?

Sugira o fix com o maior impacto e menor risco.
Nao mude a interface publica.

Template 13: Fix de memory leak

plaintext
A aplicacao esta consumindo cada vez mais memoria ao longo do tempo.
Ambiente: [Node.js / Browser / React Native]

Suspeita: [DESCREVA ONDE VOCE ACHA QUE TA O PROBLEMA, SE SOUBER]

Analise estes arquivos procurando por:
- Event listeners nao removidos
- Closures que capturam referencias grandes
- Cache sem limite de tamanho
- Timers/intervals nao limpos
- Subscriptions nao canceladas (RxJS, WebSocket, etc)

Para cada problema encontrado, sugira o fix especifico.

Template 14: Debug de race condition

plaintext
Tenho um bug que aparece intermitentemente. Suspeito de race condition.

Sintoma: [DESCREVA O COMPORTAMENTO ERRATICO]
Quando acontece: [EM CARGA ALTA / QUANDO 2 REQUESTS CHEGAM JUNTOS / ETC]

Analise o codigo procurando por:
- Operacoes read-then-write sem lock
- Estado compartilhado entre requests
- Promises que deveriam ser sequenciais mas rodam em paralelo
- Cache invalidado no momento errado

Sugira fix usando: mutex, transacao, optimistic locking ou redesign do fluxo.

Template 15: Fix de tipo TypeScript

plaintext
O TypeScript ta reclamando desse erro:

[COLE O ERRO DO TSC]

Codigo relevante:
[COLE O TRECHO]

Corrija o tipo sem usar 'any' ou 'as' (type assertion).
Se precisar criar tipos novos, crie.
Explique por que o tipo original estava errado.

Templates de documentacao e explicacao

Documentacao e a tarefa que todo dev odeia mas que faz diferenca enorme. Com IA, o custo de documentar caiu pra quase zero. Nao tem mais desculpa.

Template 16: JSDoc completo

plaintext
Adicione JSDoc em todas as funcoes e classes exportadas deste arquivo.

Padrao:
- @description: o que a funcao faz (1-2 frases)
- @param: tipo e descricao de cada parametro
- @returns: tipo e descricao do retorno
- @throws: excecoes que podem ser lancadas
- @example: exemplo de uso realista

Tom: tecnico mas claro. Sem jargao desnecessario.
Nao documente getters/setters triviais.

Template 17: Explicar codigo legado

plaintext
Explique este codigo como se eu tivesse acabado de entrar no projeto.

[COLE O CODIGO]

Quero saber:
1. O que esse codigo faz (visao geral)
2. Por que ele existe (qual problema resolve)
3. Como ele funciona (passo a passo)
4. Quais sao as dependencias criticas
5. Onde estao os pontos de risco (bugs potenciais, acoplamento)
6. Se eu precisar mudar algo, por onde comecar

Nivel: desenvolvedor pleno que conhece a stack mas nao o projeto.

Template 18: README de API

plaintext
Gere documentacao de API para estes endpoints.

Formato por endpoint:
- Metodo + Rota
- Descricao curta
- Headers obrigatorios
- Body (JSON com tipos e descricao de cada campo)
- Response de sucesso (status + body)
- Responses de erro (status + body)
- Exemplo de request com curl

Leia os handlers e middlewares para inferir os detalhes.
Se alguma informacao nao for clara no codigo, marque com [VERIFICAR].

Template 19: Changelog a partir de commits

plaintext
Gere um changelog a partir desses commits:

[COLE O GIT LOG]

Formato:
## [VERSAO] - DATA
### Novas features
- Descricao user-friendly da feature
### Correcoes
- Descricao do bug corrigido
### Mudancas internas
- Refatoracoes e melhorias que nao afetam o usuario

Regras:
- Agrupe commits relacionados num unico item
- Ignore commits de merge e formatacao
- Linguagem pra usuario final, nao pra dev (exceto em 'Mudancas internas')

Template 20: Decisao de arquitetura (ADR)

plaintext
Crie um Architecture Decision Record (ADR) para esta decisao:

Decisao: [DESCREVA A DECISAO. Ex: 'Usar Redis como cache em vez de cache em memoria']

Formato ADR:
- Titulo: [numero] - [titulo curto]
- Status: Proposto
- Contexto: Qual o problema que estamos resolvendo?
- Decisao: O que decidimos fazer?
- Alternativas consideradas: O que mais cogitamos? Por que descartamos?
- Consequencias: O que muda? Quais os riscos?
- Notas: Qualquer informacao adicional relevante

Como adaptar esses templates pro seu stack

Esses templates sao genericos de proposito. Pra tirar o maximo deles, voce precisa customizar pro seu contexto. Aqui vao 3 formas de fazer isso.

1. Coloque no CLAUDE.md ou nas regras do Cursor

Se voce usa Claude Code, coloque seus templates favoritos no CLAUDE.md do projeto. Assim toda vez que voce usar um, o Claude ja sabe a stack, as convencoes e os padroes do projeto. Nao precisa repetir contexto.

No Cursor, voce pode fazer o mesmo com as regras do projeto em .cursorrules. Mesma ideia, formato diferente.

2. Crie aliases ou snippets

Se voce usa o terminal, crie aliases no seu .zshrc ou .bashrc pra rodar templates comuns com um comando. Tipo: 'ai-test src/services/user.ts' roda o template de testes automaticamente. Poupa tempo e padroniza.

bash
# .zshrc - aliases para prompts comuns
alias ai-test='f() { claude "Crie testes unitarios para $1. Stack: Jest + TypeScript. Cubra happy path, edge cases e erros. Siga o padrao dos testes existentes."; }; f'
alias ai-refactor='f() { claude "Refatore $1 extraindo logica de negocio pra service. Mantenha interface publica. TypeScript strict."; }; f'
alias ai-docs='f() { claude "Adicione JSDoc em todas as funcoes exportadas de $1. Inclua @param, @returns e @example."; }; f'

3. Itere e melhore com o tempo

Nenhum template e perfeito de primeira. Use, veja o que ficou bom e o que ficou ruim, ajuste. Depois de 2-3 iteracoes, voce vai ter templates que geram resultado bom 90% das vezes pro seu projeto especifico.

Eu mantenho um arquivo templates.md no meu computador com todos os meus prompts refinados. Toda vez que descubro uma variacao que funciona melhor, atualizo. E um investimento que paga dividendos todos os dias.

Erros comuns em prompts para codigo

Pra fechar, os erros que eu vejo mais frequentemente. Se voce ta tendo resultados ruins com IA pra codigo, provavelmente ta caindo num desses.

Erros que destroem a qualidade do output

  • Prompt vago: 'melhore esse codigo' sem dizer o que melhorar
  • Sem contexto: nao dizer a stack, framework ou padroes do projeto
  • Sem restricoes: a IA muda tudo quando voce so queria uma coisa
  • Prompt gigante: tentar resolver 10 coisas num prompt so. Quebre em partes
  • Nao revisar: aceitar o output sem ler. A IA erra 5-10% das vezes
  • Sem exemplos: 'faca como X' funciona melhor que 'faca algo bom'
  • Ignorar o formato: nao pedir o formato de output que voce quer

Resumo final

Prompt bom = Contexto + Instrucao + Formato + Restricoes

Use esses 20 templates como ponto de partida e customize pro seu stack

Coloque templates no CLAUDE.md ou .cursorrules pra nao repetir contexto

Crie aliases no terminal pra rodar prompts comuns com um comando

Itere: use, avalie, ajuste. Depois de 3 iteracoes o template fica afiado