6. Exemplos de Uso
Este capítulo apresenta exemplos práticos de uso correto e incorreto de vibecoding.
6.1. Casos de Uso Aprovados
6.1.1. Exemplo 1: Validação de CPF (TypeScript)
Prompt seguro:
Crie função TypeScript para validar CPF brasileiro.
- Retornar boolean
- Verificar dígitos verificadores
- Incluir testes unitários
- Aceitar formato com ou sem máscaraCódigo gerado e revisado:
/**
* Valida número de CPF brasileiro
* @generated-by Claude AI
* @reviewed-by Maria Santos - 2026-01-20
*/
export function validateCPF(cpf: string): boolean {
const cleanCPF = cpf.replace(/\D/g, '');
if (cleanCPF.length !== 11) return false;
if (/^(\d)\1+$/.test(cleanCPF)) return false;
// Validação primeiro dígito
let sum = 0;
for (let i = 0; i < 9; i++) {
sum += parseInt(cleanCPF[i]) * (10 - i);
}
let remainder = (sum * 10) % 11;
if (remainder === 10) remainder = 0;
if (remainder !== parseInt(cleanCPF[9])) return false;
// Validação segundo dígito
sum = 0;
for (let i = 0; i < 10; i++) {
sum += parseInt(cleanCPF[i]) * (11 - i);
}
remainder = (sum * 10) % 11;
if (remainder === 10) remainder = 0;
if (remainder !== parseInt(cleanCPF[10])) return false;
return true;
}
// Testes
describe('validateCPF', () => {
it('should validate valid CPF', () => {
expect(validateCPF('123.456.789-09')).toBe(true);
});
it('should reject sequential numbers', () => {
expect(validateCPF('111.111.111-11')).toBe(false);
});
it('should accept unmasked CPF', () => {
expect(validateCPF('12345678909')).toBe(true);
});
});✅ Aprovado: Função específica, testável, compreensível
6.1.2. Exemplo 2: Repository Pattern (Laravel)
Prompt seguro:
Criar ProductRepository em Laravel seguindo Repository Pattern.
- Métodos: findAll, findById, create, update, delete
- Paginação (15 items/page)
- Usar Eloquent ORM
- Type hintsCódigo gerado:
<?php
/**
* Repository para entidade Product
* @generated-by GitHub Copilot
* @reviewed-by João Silva - 2026-01-20
*/
namespace App\Repositories;
use App\Models\Product;
use Illuminate\Pagination\LengthAwarePaginator;
class ProductRepository
{
public function findAll(int $perPage = 15): LengthAwarePaginator
{
return Product::paginate($perPage);
}
public function findById(int $id): ?Product
{
return Product::find($id);
}
public function create(array $data): Product
{
return Product::create($data);
}
public function update(int $id, array $data): bool
{
$product = $this->findById($id);
if (!$product) {
return false;
}
return $product->update($data);
}
public function delete(int $id): bool
{
$product = $this->findById($id);
if (!$product) {
return false;
}
return $product->delete();
}
}✅ Aprovado: Padrão claro, type-safe, sem lógica complexa
6.2. Cenários PROIBIDOS com Alternativas
6.2.1. Cenário Proibido 1: Sistema de Login Completo
❌ PROIBIDO:
Prompt: "Crie um sistema de autenticação completo com JWT,
incluindo login, registro, recuperação de senha e 2FA"Problema: "Fucking code" - muito amplo e crítico
✅ ALTERNATIVA CORRETA:
Dividir em 10+ tarefas pequenas:
- Interface User
- Hash de senha com bcrypt
- Função de geração de JWT
- Função de validação de JWT
- Middleware de autenticação
- Endpoint de login (sem lógica complexa)
- Testes de hash
- Testes de JWT
- Testes de middleware
- Documentação
Cada tarefa: < 50 linhas, revisada individualmente
6.2.2. Cenário Proibido 2: Debug com Dados Reais
❌ PROIBIDO:
Prompt: "Este código está falhando ao processar pedido do cliente
João Silva (joao@empresa.com):
SELECT * FROM orders WHERE customer_email = 'joao@empresa.com'"Problema: Expôs nome e email real de cliente
✅ ALTERNATIVA:
Prompt: "Query SQL está retornando erro de sintaxe:
SELECT * FROM orders WHERE customer_email = ?
Stack: PostgreSQL 15, Node.js
Erro: syntax error at or near '?'"6.3. Anti-Patterns
Anti-Pattern 1: Copy-Paste sem Compreensão
Erro: Copiar código AI sem entender Consequência: Bug em produção, vulnerabilidade Correção: Estudar ANTES de usar
Anti-Pattern 2: Confiar Cegamente
Erro: Assumir que código AI está correto Consequência: SQL Injection, XSS Correção: Validar contra OWASP, testar edge cases
Anti-Pattern 3: Prompts Vagos
Erro: "Crie uma função de login" Consequência: Código genérico, inseguro Correção: Prompts específicos com requisitos claros
Mais exemplos: Ver documentação completa no repositório interno