Apresentação realizada com o @andrefaria no Agile Brazil 2012.
Nos livros Clean Code e Clean CodeR, Robert Martin descreveu o que significa ser um desenvolvedor de software profissional, como ele deve se comportar, e como deve escrever código. Nessa palestra gostaríamos de apresentar um pouco sobre o que temos aprendido utilizando as técnicas de Clean Code e como você pode, a partir delas, tornar sua equipe mais ágil, melhorar a qualidade e produtividade e tornar sua aplicação flexível para obter respostas rápidas às solicitações do mercado.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Clean Code - Desenvolvendo como um Profissional Ágil
1. Clean Code
’
Desenvolvendo como um Profissional Agil
André Faria Bruno Lui
@andrefaria @bruno_lui
2. André Faria Gomes
CIO na Bluesoft
+10 de Anos de Desenvolvimento de Software
Black Belt Lean 6 Sigma
Instrutor da Adaptworks
@andrefaria
http://blog.andrefaria.com
http://blog.bluesoft.com.br
3. Bruno Lui
Desenvolvedor na Bluesoft
+5 Anos no Desenvolvimento de Software
@brunolui
http://brunolui.com
4. Então você quer ser
um desenvolvedor de
software
profissional?
5. Quer que as mães
apontem para você e
digam a seus filhos
para que sejam como
você?
66. for (int j=0; j < 34; j++) {
s += (t[j]*4)/5;
}
Nomes com apenas uma letra ou numéricos
são difíceis de serem encontrados e
entendidos dentro do código.
77. Devem ser pequenos
“A primeira regra dos métodos é
que eles devem ser pequenos. A
segunda regra é que eles devem ser
menores ainda.”
Uncle Bob
Classes menores são mais
fáceis de ler e entender o
que estão fazendo.
78. método <= 20 linhas
linha <= 100 caracteres
classe = 200 a 500 linhas
79. e
éto dos
“M
s d evem
fun çõe uma
apenas
faz er certa
faz ê-la
cois a,
azê -la.”
ent e f
e s om
80. efin ir o
é d
O difícil uma
ape nas
é “
que
co isa”
81. Tentar extrair um novo método de
um outro, e dar um nome ao trecho
extraído é uma maneira de identificar
82. Parâmetros
Métodos com muitos parâmetros devem ser
evitados e possuírem uma boa justificativa para
existirem.
Pois confundem e complicam o entendimento,
além de dificultar os testes.
83. Cuidado com os efeitos colaterais.
Eles são mentiras contadas pelo método,
quando diz que fará uma coisa, mas faz
outras “escondidas”.
85. CQS - Command Query Separation
Métodos devem fazer algo ou retornar algo, mas não
as duas coisas. Isso gera confusão, além de atribuir
mais de uma responsabilidade.
86. DRY - Don’t Repeat Yourself
Preste atenção no código repetido. Evite duplicidades
reaproveitando seus métodos.
87. Para saber se o
tamanho da classe é
o ideal, devemos
analisar suas
responsabilidades.
88. Princípio da única da responsabilidade (SRP)
O princípio diz que uma
classe deve ter uma, e
apenas uma razão para
mudar.
90. Coesão
Classes devem conter poucas variáveis.
Cada método deve manipular
uma ou mais variáveis.
Quanto mais variáveis um
método manipula, mais coeso
ele é para a classe.
Quando há coesão, significa
que métodos e variáveis são
co-dependentes.
92. Comentários pode
m
ser mentirosos
e
trazer
desinformação,
mesmo sem inte
nção;
93. Ele não recebem
“man utenção”, sendo
que quanto mais
velhos maior a chance
de e starem errados.
94. Come ntários não
vão esconder o
código ruim
Geralmente você comenta
para que se faça entender.
Quando pensar em
comentar, é sinal que seu
código deve ser refatorado.
95. // check if the employee is eligible for benefits
if ((employee.flags == 100) && (employee.age > 65))
Explique-se no código!
if (employee.isEligibleForBenefits())
102. “Formatação é importante, pois se
trata de Comunicação.”
Boa Comunicação é essencial para os
desenvolvedores profissionais
103. A legibilidade do seu código terá
profundo efeito em todas as
mudanças que serão feitas e
seu estilo e disciplina sobrevive
mesmo se o código original for
alterado
105. A ordem dos métodos cria um fluxo de
leitura melhorando a legibilidade do código
106. Uma boa identação do código ajuda a visualizar
todo o escopo, torna mais fácil e rápida a
identificação de situações e regras relevantes.
107. Essa identação não deve ser maior do que 2,
para compreensão fácil e rápida
if (a > 0) {
if (b > 1) {
if (c > 2) {
if (d > 3) {
if (e > 4) {
108. Espaçamento
public getSum(int one,int two,double number){
double sum=number+(one*two);
}
Dê espaços entre operadores, parâmetros e vírgulas.
public getSum (int one, int two, double number) {
double sum = number + (one * two);
}
110. Tratar erros é responsabilidade do
desenvolvedor, as coisas podem dar errado e
nós temos que garantir que nosso código tem
um tratamento para cada situação
111. Use exceptio ns ao invés de
retornar c ódigos de erro
Quem faz a chamada deve
verificar se há erros no retorno
do método, e isso pode ser
facilmente esquecido.
112. Forneça o contexto
na exception
Crie mensagens
informativas para os
erros, mencione o que
aconteceu, o que estava
tentando fazer, e por
que o erro ocorreu.
113. Separe as regras de negócio de erros ou
outras situações.
try {
MealExpenses expenses = expensesDao.getMeals();
total += expenses.getTotal();
} catch (MealExceptionNotFound e) {
total += expenses.getMealPerDiem();
}
114. Não retorne null
Prefira retornar
Special case objects
ou vazio no caso de
coleções
115. Não passe null
Evite passar null para
seus métodos, isso
pode gerar as
famosas
NullPointerExceptions
118. As Três Leis do TDD
1 - Você não pode escrever o código
até que tenha criado um teste
falhando.
119. As Três Leis do TDD
1 - Você não pode escrever o código
até que tenha criado um teste
falhando.
2 - Você não pode escrever mais
testes do que seja suficiente para
falhar.
120. As Três Leis do TDD
1 - Você não pode escrever o código
até que tenha criado um teste
falhando.
2 - Você não pode escrever mais
testes do que seja suficiente para
falhar.
3 - Você não pode escrever mais
código do que o suficiente para
passar o teste que esta falhando.
121. 1 conceito por teste
Separe um teste que esteja
testando mais de um
conceito em outros testes.
Facilite o entendimento
de cada teste.
132. - Comentários pobres, obsoletos e redundantes
- Código comentado
- Testes que requerem mais de um passo
- Muitos parâmetros ou parâmetros boolean
- Métodos mortos ou que fazem muita coisa
- Responsabilidades fora do contexto
- Nomes pequenos e inexpressivos
134. Conclusão
Clean code não foi escrito para ser uma lista de regras
Você não se torna um bom programador aprendendo
uma lista de regras.
As técnicas e práticas têm que começar a fazer parte
do nosso dia a dia.
Devemos nos preocupar com a qualidade do código e
não somente fazê-lo funcionar.