Clean Code em Java: princípios de escrita de código limpo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que o código limpo é a chave para o sucesso do projeto

Mais cedo ou mais tarde, todo desenvolvedor encontra código "sujo": nomes de variáveis sem sentido, funções com centenas de linhas, blocos repetidos e números mágicos. Esse código é difícil de ler, complicado de manter e praticamente impossível de estender sem o risco de quebrar toda a aplicação. O livro de Robert Martin "Clean Code" tornou-se a bíblia para programadores que buscam escrever código de qualidade. Neste artigo, vamos analisar os princípios-chave do Clean Code em Java com exemplos práticos que ajudarão você a tornar seu código compreensível, confiável e fácil de manter.



1. Nomenclatura: fale a linguagem do negócio

O nome de uma variável, método ou classe deve responder às perguntas: "O que é isso?" e "Para que serve?". Evite abreviações de uma letra e termos abstratos.



Exemplo ruim

int d; // tempo desde o pedido (em dias)List<String> lst = new ArrayList<>();void prc() { ... }


Exemplo bom

int daysSinceOrder;List<String> customerNames = new ArrayList<>();void processPayment() { ... }


Recomendações adicionais

  • Classes — substantivos: Order, CustomerRepository.
  • Métodos — verbos ou pares verbais: saveOrder(), isValidEmail().
  • Evite palavras "ruídos": Data, Info, Manager — se não agregarem significado.


2. Funções: curtas, claras, uma tarefa

Uma função deve fazer apenas uma coisa e fazê-la bem. O comprimento ideal é de 10 a 15 linhas. Se a função não couber na tela — divida-a.



Exemplo ruim: função canivete suíço

public void processOrder(Order order) {    // 1. Validação    if (order == null || order.getItems().isEmpty()) {        throw new IllegalArgumentException("Invalid order");    }    // 2. Cálculo do desconto    double discount = 0;    if (order.getTotal() > 1000) discount = 0.1;    // 3. Salvamento no BD    database.save(order);    // 4. Envio de email    emailService.sendConfirmation(order.getCustomerEmail());}


Exemplo bom: separação de responsabilidades

public void processOrder(Order order) {    validateOrder(order);    applyDiscount(order);    persistOrder(order);    notifyCustomer(order);}

private void validateOrder(Order order) { if (order == null || order.getItems().isEmpty()) { throw new IllegalArgumentException("Invalid order"); }}

private void applyDiscount(Order order) { if (order.getTotal() > 1000) { order.setDiscount(0.1); }}

private void persistOrder(Order order) { database.save(order);}

private void notifyCustomer(Order order) { emailService.sendConfirmation(order.getCustomerEmail());}


3. Evite duplicação (DRY) e números mágicos

Código repetido é o principal inimigo da manutenibilidade. Se você está copiando um bloco de código, é hora de extraí-lo para um método ou constante separada.



Problema: números mágicos

if (age > 18) { ... } // O que é 18? Idade mínima? Limite de desconto?


Solução: constantes com nomes

private static final int MINIMUM_DRIVING_AGE = 18;// ...if (age > MINIMUM_DRIVING_AGE) { ... }


Exemplo de duplicação

// Ruimdouble totalForFirst = price1 * quantity1 * 0.95;double totalForSecond = price2 * quantity2 * 0.95;

// Bomdouble calculateLineTotal(double price, int quantity) { return price * quantity * 0.95;}double totalForFirst = calculateLineTotal(price1, quantity1);double totalForSecond = calculateLineTotal(price2, quantity2);


Blogs

Book Recommendations