Clean Code
Sobre mim
Lucas (Chapola)
Ex- guitarrista, ex-são paulino, ex-bauruense
Engenheiro de software na CI&T (Campinas)
Fan do Uncle Bob <3
Sobre o Uncle Bob
Um dos autores do manifesto ágil
Desenvolvedor desde a década de 70
Identificou os princípios de OOP
Autor de diversos livros
Custo de um código confuso
Produtividade x Tempo
- Difícil de ler e modificar
- Lógica duplicada
- Lógicas condicionais complexas
- Comportamento difícil de prever
Por que produzimos código ruim?
Tentativa de ser rápido
Pressa
Inexperiência
Otimização prematura
O que é código limpo?
Bjarne Stroustrup (criador do c++)
Elegante e eficiente: logica direta, dependencias minimas, tratamento de erro completo. "Que faça apenas umas coisa"
Ward Cunninghan (signatário do manifesto agil e mais um monte de coisa)
Cada rotina se mostra como se esperava. "Comportamento previsível"
Michael Feathers (solid e autor de "trabalho eficaz com código legado")
Foi escrito por alguém que se importa
Nomes Significativos
int d;
int d; // tempo decorrido em dias
int tempoDecorridoEmDias;
int diasDesdeInicio;
int diasDesdeModificacao;
Evite notação húngara
Nomes pronunciáveis
Use nomes do domínio
Use nomes do contexto
Não faça piadinhas
Funções
"A primeira regra para funções é que elas devem ser pequenas. A segunda é que elas precisam ser menores ainda."
Faça apenas uma coisa
Regra decrescente
Nomes descritivos
Poucos parametros
Evitar repetição
Comentários
"Não insira comentários em um código ruim, reescreva-o"
// Verifica se o funcionário tem direito a todos os benefícios
if((empregado.flags && FLAG_HORAS) && empregado.idade > 65)){
...
}
if(empregado.ehElegivelTodosBeneficios){
...
}
Comentários Ruins
Redundantes
Enganadores
Autoria
Código comentado
Cabeçalho de funções (javadocs)
Classes
SOLID
SRP: responsabilidade única
OCP: aberto/fechado
LSP: substituição de Liskov
ISP: segregação de interfaces
DIP: inversão de dependência
Single Responsibility Principle
"Uma classe deve ter apenas um motivo para mudar."
public class Employee {
private final PersistenceSystem persistence;
public Employee(PersistenceSystem persistence){
this.persistence = persistence;
}
public int calculePay(){
// regras para calcular pagamento
}
public void store(){
// regras para persistencia
}
}
Recomendações
Obrigado!
Clean Code
By Lucas Rodrigues
Clean Code
- 587