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

  • 522