Clean Code em Java: princípios e exemplos para iniciantes
Cada desenvolvedor, ao iniciar sua jornada em Java, mais cedo ou mais tarde se depara com a situação: o código funciona, mas entender ele depois de uma semana já é impossível. Este é o clássico problema do código "sujo". Clean Code (código limpo) não é apenas um termo da moda, mas um conjunto de práticas que tornam seu programa compreensível, facilmente mantível e extensível. Neste artigo, vamos abordar os principais princípios do Clean Code em Java para iniciantes com exemplos práticos.
Por que o código limpo é importante?
No desenvolvimento real, o código é lido com muito mais frequência do que é escrito. Você voltará aos seus projetos antigos, trabalhará em equipe ou passará o código para colegas. Código mal escrito retarda o desenvolvimento, aumenta o número de bugs e desmotiva. O Clean Code economiza tempo e paciência. Vamos analisar os princípios-chave.
1. Nomes claros: diga o que você faz
Os nomes de variáveis, métodos e classes devem responder à pergunta "o que é isso?" ou "o que faz?". Não economize caracteres — use nomes significativos.
Exemplo ruim (nomes pouco claros):
int d; // tempo decorrido em diasList<String> lst = new ArrayList<>();public void prc() { ... }Exemplo bom (Clean Code):
int elapsedTimeInDays;List<String> customerNames = new ArrayList<>();public void processPayment() { ... }Dica: Evite nomes de uma letra (exceto para contadores de loops). O nome deve revelar a intenção. Em vez de list, use activeUsers ou orderIds.
2. Funções pequenas: uma tarefa — uma função
As funções devem fazer apenas uma coisa e fazê-la bem. Métodos longos são difíceis de testar e entender. Busque um comprimento de no máximo 20–30 linhas.
Exemplo ruim (função faz tudo):
public void processOrder(Order order) { // validação if (order.getTotal() <= 0) { throw new IllegalArgumentException("Pedido inválido"); } // salvar no banco saveToDatabase(order); // enviar email sendEmail(order.getCustomerEmail(), "Pedido confirmado"); // atualizar estoque updateInventory(order);}Exemplo bom (divisão em funções pequenas):
public void processOrder(Order order) { validateOrder(order); saveOrder(order); notifyCustomer(order); updateStock(order);}
private void validateOrder(Order order) { if (order.getTotal() <= 0) { throw new IllegalArgumentException("Total do pedido inválido"); }}
private void notifyCustomer(Order order) { sendEmail(order.getCustomerEmail(), "Pedido confirmado");}Agora cada função tem uma responsabilidade clara. O código se tornou autodocumentado.
3. Evite duplicação: princípio DRY
O princípio DRY (Don't Repeat Yourself) afirma: cada parte do conhecimento deve ter uma representação única no sistema. Se você copia código, cria problemas de manutenção.
Exemplo ruim (duplicação):
public double calculateDiscountForRegularCustomer(double price) { return price * 0.9; // 10% de desconto}
public double calculateDiscountForVipCustomer(double price) { return price * 0.8; // 20% de desconto}Exemplo bom (generalização):
public double calculateDiscount(double price, CustomerType type) { double discountRate = getDiscountRate(type); return price * discountRate;}
private double getDiscountRate(CustomerType type) { switch (type) { case REGULAR: return 0.9; case VIP: return 0.8; default: return 1.0; }}Agora a alteração da lógica de desconto ocorre em um único lugar.
4. Formatação e comentários: limpeza visual
O código deve ser bem