Escolar Documentos
Profissional Documentos
Cultura Documentos
Rodrigo Rosa
@rodrigorosa
Rodrigo Rosa
rodrigo@wonder.com.br
@rodrigorosa
Mas afinal…
Dave Thomas
Legibilidade, código co-autor do The Pragmatic Programmer
como leitura de um livro!
Ward Cunningham
co-criador da XP
“Qualquer um consegue escrever código que um computador entende.
Bons programadores escrevem código que humanos
entendem.” (Martin Fowler)
Por que é importante
escrever bom código?
Funções
Comentários
Formatação
Classes
Testes Automatizados
Nomes
Revelar intenção
calcular(int d, int t)
copy(a, b);
copy(source, destination);
Evitar redundância
Double variableValorPagar;
Double valorPagar;
Date genymdhms;
Date generationTimestamp;
Usar nomes:
Procuráveis:
//números mágicos
String a;
total = 7;
int x;
MAX_FILES_PER_STUDENT = 7;
Evitar encoding
Notação húngara
nValor;
sNome;
aCondicoes;
Member prefixes
m_Valor;
_valor;
Usar um termo por
conceito
getPessoas();
fetchPessoas();
retrievePessoas();
Classes e métodos
Classes devem ser substantivos
Pessoa
Conta
Pagamento
totalizar()
excluir()
“Parece simples, mas não deixe isso te enganar”
(Erico Rocha)
Funções
Regras do Clube das Funções:
Número de indentações?
Exemplos de funções
pequenas
http://github.com.br/unclebob/fitnesse
Ler o código de cima para
baixo
Estruturar em níveis
Três? Evitar!
Parâmetros do tipo boolean: maybe not
https://acertandooalvo.files.wordpress.com/2012/07/fofoca.jpg
http://vidadeprogramador.com.br/2015/01/21/olha-esse-comentario/
Quando comentários são
ruins?
Quando são redundantes
if(employee.isEligibleForFullBenefits())
Melhor refatorar
// módulo da lista global depende
// do subsistema do qual fazemos parte?
if(module.getDependSystems()
.contains(subSysMod.getSubSystem())){}
TODO
Destacar a importância de algo
Lembrem-se!
http://capituloportoalegre.blogspot.com.br/2011/06/demolay-e-capa-do-jornal-zero-hora-e.html
Ordenação vertical (de cima para baixo)
https://github.com/caelum/caelum-stella/blob/master/stella-boleto/src/main/java/br/com/caelum/stella/boleto/utils/StellaStringUtils.java
Padrões internos
Padrões da equipe
Recursos da IDE
Respeito!
Classes
SOLID
Single Responsibility Principle (SRP)
Responsabilidade única
Acoplamento
http://pt.wikipedia.org/wiki/Acoplamento_%28programa%C3%A7%C3%A3o_de_computadores%29
Coesão
Peer review
CodeClimate, RubyCritic
“Reconhecer bom código de mau código não significa que você saiba
fazer bom código.” (Uncle Bob)
Leituras complementares
Fontes e referências
http://blog.cleancoder.com/
http://aestheticio.com/why-your-code-is-hard-to-understand/
http://www.cs.colostate.edu/TechReports/Reports/1994/tr-120.pdf
https://github.com/caelum/caelum-stella/
http://blog.caelum.com.br/principios-do-codigo-solido-na-orientacao-a-
objetos/
https://github.com/unclebob