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
- 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'
- 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'
- Formato: como voce quer o resultado. Ex: 'Retorne apenas o codigo, sem explicacao' ou 'Explique cada mudanca em comentarios'
- 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:
Melhore esse codigoE esse prompt com estrutura gera resultado utilizavel:
[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
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
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 novaTemplate 3: Converter callback para async/await
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 asyncTemplate 4: Eliminar duplicacao
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 compartilhadasTemplate 5: Adicionar tipagem TypeScript
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 separadoTemplates 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
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 comportamentoTemplate 7: Testes de integracao para API
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 rollbackTemplate 8: Testes de componente React
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 testsTemplate 9: Adicionar testes em codigo legado
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 criticosTemplate 10: Gerar test data e fixtures
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
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
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
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
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
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
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
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
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
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)
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 relevanteComo 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.
# .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