![Page 1: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/1.jpg)
Desenvolvendo como um Profissional Agil
André Faria@andrefaria @bruno_lui
Bruno Lui
Clean Code’
![Page 2: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/2.jpg)
André Faria Gomes
@andrefariahttp://blog.andrefaria.comhttp://blog.bluesoft.com.br
Black Belt Lean 6 Sigma
+10 de Anos de Desenvolvimento de SoftwareCIO na Bluesoft
Instrutor da Adaptworks
![Page 3: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/3.jpg)
Bruno Lui
@brunoluihttp://brunolui.com
+5 Anos no Desenvolvimento de Software
Desenvolvedor na Bluesoft
![Page 4: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/4.jpg)
Então você quer ser um desenvolvedor de
software profissional?
![Page 5: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/5.jpg)
Quer que as mães apontem para você e digam a seus filhos para que sejam como
você?
![Page 6: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/6.jpg)
Cuidado com o que você Pede!
![Page 7: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/7.jpg)
Profissionalismo é sem dúvida digno
de honra e orgulho, mas também é
responsabilidade.
![Page 8: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/8.jpg)
Você não pode se orgulhar de algo pelo qual não se responsabiliza...
![Page 9: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/9.jpg)
É muito mais fácil ser um largado... Não se responsabilizar pelo trabalho e pela carreira....
![Page 10: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/10.jpg)
Quando um não-profissional faz uma besteira, seu empregador limpa a
bagunça...
![Page 11: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/11.jpg)
Quando um profissional faz uma besteira, ele
limpa a bagunça!
![Page 12: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/12.jpg)
O que você faz para escrever software sem defeitos?
![Page 13: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/13.jpg)
Você se responsabiliza pelos defeitos que cria?
![Page 14: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/14.jpg)
Escrever testes é essencial para garantir que seu software funciona...
![Page 15: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/15.jpg)
Como você pode dizer que é responsável se
não os escreve?
![Page 16: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/16.jpg)
“Toda a linha de código que você escreve deve estar testada, e
Ponto Final!”Uncle Bob
![Page 17: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/17.jpg)
Código escrito por profissionais pode ser alterado sem custos
exorbitantes!
![Page 18: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/18.jpg)
Em outras palavras, você também é responsável pela
estrutura do código que escreve!
![Page 19: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/19.jpg)
Sua carreira é sua responsabilidade!
TreineVá a conferênciasLeia
Não é responsabilidade do seu empregador
![Page 20: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/20.jpg)
Sua empresa te ajuda com isso?
Ótimo! Estão te fazendo um favor.
![Page 21: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/21.jpg)
Mas a responsabilidade ainda é sua!
![Page 22: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/22.jpg)
Também não é responsabilidade do seu empregador te dar “tempo” para você estudar...
![Page 23: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/23.jpg)
“Você recebe por 40 horas para resolver os problemas da sua
empresa não os seus...”
Uncle Bob
![Page 24: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/24.jpg)
Faça as contas....
![Page 25: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/25.jpg)
Sua semana tem 168 horas.
![Page 26: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/26.jpg)
Dê à seu empregador 40, e à sua carreira 20
![Page 27: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/27.jpg)
Sobram 108
![Page 28: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/28.jpg)
+ 56 para dormir 48
![Page 29: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/29.jpg)
+ 52 para ...60
![Page 30: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/30.jpg)
![Page 31: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/31.jpg)
![Page 32: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/32.jpg)
![Page 33: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/33.jpg)
![Page 34: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/34.jpg)
![Page 35: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/35.jpg)
![Page 36: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/36.jpg)
![Page 37: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/37.jpg)
![Page 38: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/38.jpg)
![Page 39: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/39.jpg)
![Page 40: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/40.jpg)
![Page 41: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/41.jpg)
![Page 42: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/42.jpg)
![Page 43: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/43.jpg)
![Page 44: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/44.jpg)
![Page 45: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/45.jpg)
![Page 46: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/46.jpg)
![Page 47: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/47.jpg)
Só não desperdice...
![Page 48: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/48.jpg)
![Page 49: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/49.jpg)
Durante essas 20 horas você deve
estar fazendo algo que gosta, que
aumente ainda mais a sua paixão pelo
que faz.
![Page 50: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/50.jpg)
Esse é o grande segredo!
![Page 51: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/51.jpg)
Além disso,o desenvolvedor
profissional de verdadese preocupa com o código que escreve...
![Page 52: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/52.jpg)
...desenvolve somente código limpo e não consegue mais
escrever código ruim.
![Page 53: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/53.jpg)
Ninguém gosta de encontrar um código ruim !
![Page 54: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/54.jpg)
Raiva
![Page 55: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/55.jpg)
Perda de Tempo
![Page 56: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/56.jpg)
Frustração
![Page 57: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/57.jpg)
Dor
![Page 58: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/58.jpg)
Você fica P...
![Page 59: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/59.jpg)
Mas afinal, o que é um
código limpo?
![Page 60: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/60.jpg)
O que é um código limpo ?
SimplesDiretoEficienteSem duplicidadeEleganteFeito com cuidado
![Page 61: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/61.jpg)
Escolhemos nomes para tudo, então devemos fazer isso bem feito
Nomes significativo
s
![Page 62: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/62.jpg)
- Por que existe;- O que faz;- Como é usado;
O nome deve dizer...
![Page 63: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/63.jpg)
Use nomes que revelem sua intenção
![Page 64: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/64.jpg)
int d; // days
Se um nome de classe ou método requer um comentário, ele não está revelando sua intenção
![Page 65: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/65.jpg)
a1?
int d?a2?
Faça distinções significativas
![Page 66: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/66.jpg)
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.
![Page 67: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/67.jpg)
Use nomes fáceis de encontrar
![Page 68: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/68.jpg)
Use nomes pronunciáveis
![Page 69: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/69.jpg)
Pronuncie seu código
private Timestamp genDMYHS()
private Timestamp generateTimestamp()
![Page 70: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/70.jpg)
Evite palavras
que não são
palavras
![Page 71: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/71.jpg)
Não economize palavras“Use várias palavras para que o método ou variável sejam facilmente entendidos e possam transmitir seu
propósito”
![Page 72: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/72.jpg)
Evite desinformação
Evite palavras que podem ser variáveis ou palavras reservadas em outras
plataformas
![Page 73: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/73.jpg)
Evite desinformação
Evite dar nomes como “listaDeLancamentos”, o tipo não precisa estar no nome
(notação húngara)
![Page 74: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/74.jpg)
Evite desinformação
Evite trocadilhos, escreva exatamente o que você
quer dizer
![Page 75: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/75.jpg)
Nomes de classes devem ser substantivos e não devem conter verbos
Boas práticas
Nomes de métodos devem conter verbos
![Page 76: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/76.jpg)
MétodosClasses
![Page 77: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/77.jpg)
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.
![Page 78: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/78.jpg)
método <= 20 linhaslinha <= 100 caracteres
classe = 200 a 500 linhas
![Page 79: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/79.jpg)
“Métodos e
funções devem
fazer apenas
uma
coisa, fazê-la
certa
e somente faz
ê-la.”
![Page 80: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/80.jpg)
O difícil é defi
nir o
que é “apenas
uma
coisa”
![Page 81: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/81.jpg)
Tentar extrair um novo método de um outro, e dar um nome ao trecho extraído é uma maneira de identificar
![Page 82: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/82.jpg)
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.
![Page 83: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/83.jpg)
Cuidado com os efeitos colaterais. Eles são mentiras contadas pelo método, quando diz que fará uma coisa, mas faz
outras “escondidas”.
![Page 84: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/84.jpg)
public boolean checkPassword (String password) {String passwordStatus = crypto.decrypt(password);if (passwordStatus.equals(“OK”)) {
Session.initialize();return true;
}return false;
}
![Page 85: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/85.jpg)
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.
![Page 86: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/86.jpg)
Preste atenção no código repetido. Evite duplicidades reaproveitando seus métodos.
DRY - Don’t Repeat Yourself
![Page 87: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/87.jpg)
Para saber se o tamanho da classe é
o ideal, devemos analisar suas
responsabilidades.
![Page 88: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/88.jpg)
Princípio da única da responsabilidade (SRP)
O princípio diz que uma classe deve ter uma, e apenas uma razão para
mudar.
![Page 89: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/89.jpg)
Tentar identificar responsabilidades ajuda a melhorar
nosso código e criar melhores abstrações
Esse é um dos conceitos mais
importantes em OO
![Page 90: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/90.jpg)
Coesão
Cada método deve manipular uma ou mais variáveis.
Classes devem conter poucas 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.
![Page 91: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/91.jpg)
Comentários
![Page 92: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/92.jpg)
Comentários podem ser mentirosos e
trazer desinformação,
mesmo sem intenção;
![Page 93: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/93.jpg)
Ele não recebem
“manutenção”, sendo
que quanto mais
velhos maior a chance
de estarem errados.
![Page 94: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/94.jpg)
Comentá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.
![Page 95: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/95.jpg)
Explique-se no código!
// check if the employee is eligible for benefits if ((employee.flags == 100) && (employee.age > 65))
if (employee.isEligibleForBenefits())
![Page 96: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/96.jpg)
Closing brace comments
try {String nada;while (i = 3) {
i++;...
} // end while } // end if
![Page 97: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/97.jpg)
“Qualquer comentário que faça você olhar para outras
partes do código para entendê-lo, não vale os bits que
consome”. Uncle Bob
![Page 98: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/98.jpg)
Comentários podem ser úteis...
Aviso de consequências que um trecho de código pode vir a causar
![Page 99: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/99.jpg)
Comentários podem ser úteis...
Mostrar a intenção por trás de uma decisão tomada, e não só pela
informação.
![Page 100: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/100.jpg)
Quando alguém vê um código
comentado, não tem coragem de
apagá-lo. Vão pensar que há um
motivo para estar ali.
Nunca deixe código comentado!
![Page 101: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/101.jpg)
Formatação
![Page 102: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/102.jpg)
“Formatação é importante, pois se trata de Comunicação.”
Boa Comunicação é essencial para os desenvolvedores profissionais
![Page 103: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/103.jpg)
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
![Page 104: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/104.jpg)
Métodos com conceitos relacionados devem ficar verticalmente próximos
![Page 105: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/105.jpg)
A ordem dos métodos cria um fluxo de leitura melhorando a legibilidade do código
![Page 106: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/106.jpg)
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.
![Page 107: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/107.jpg)
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) {
![Page 108: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/108.jpg)
Dê espaços entre operadores, parâmetros e vírgulas.
public getSum(int one,int two,double number){double sum=number+(one*two);
}
Espaçamento
public getSum (int one, int two, double number) {double sum = number + (one * two);
}
![Page 109: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/109.jpg)
Tratamento
de erros
![Page 110: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/110.jpg)
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
![Page 111: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/111.jpg)
Quem faz a chamada deve verificar se há erros no retorno do método, e isso pode ser
facilmente esquecido.
Use exceptions ao invés de
retornar códigos de erro
![Page 112: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/112.jpg)
Crie mensagens informativas para os erros, mencione o que aconteceu, o que estava tentando fazer, e por que o erro ocorreu.
Forneça o contexto na exception
![Page 113: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/113.jpg)
try {MealExpenses expenses = expensesDao.getMeals();total += expenses.getTotal();
} catch (MealExceptionNotFound e) {total += expenses.getMealPerDiem();
}
Separe as regras de negócio de erros ou outras situações.
![Page 114: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/114.jpg)
Prefira retornar Special case objects ou vazio no caso de
coleções
Não retorne null
![Page 115: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/115.jpg)
Não passe null
Evite passar null para seus métodos, isso
pode gerar as famosas
NullPointerExceptions
![Page 116: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/116.jpg)
Testes unitários
![Page 117: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/117.jpg)
As Três Leis do TDD
![Page 118: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/118.jpg)
As Três Leis do TDD
1 - Você não pode escrever o código até que tenha criado um teste falhando.
![Page 119: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/119.jpg)
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.
![Page 120: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/120.jpg)
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.
![Page 121: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/121.jpg)
conceito por teste
Separe um teste que esteja testando mais de um
conceito em outros testes.
Facilite o entendimento de cada teste.
1
![Page 122: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/122.jpg)
F.I.R.S.TTestes
![Page 123: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/123.jpg)
Os testes devem ser rápidos para executar, pois quando são lentos a frequência de execução
diminui.
Fast
![Page 124: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/124.jpg)
Testes não podem depender uns dos outros, pois se um falha os outros também
falharam
Independent
![Page 125: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/125.jpg)
Ao executa-los mais de uma vez, devem sempre retornar o mesmo resultado
Repeatable
![Page 126: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/126.jpg)
Devem possuir respostas booleanas, sem precisar de interpretação para saber o
resultado.
Self-Validating
![Page 127: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/127.jpg)
Os testes devem ser escritos antes do código. Após o código será mais
difícil fazer o teste.
Timely
![Page 128: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/128.jpg)
O código do teste é tão importante quanto o código da produção
O teste precisa sofrer alterações da mesma forma que o código.
![Page 129: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/129.jpg)
Quanto mais sujo o teste mais difícil dar
manutenção, e menor a flexibilidade para alterá-lo.
![Page 130: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/130.jpg)
“Se você deixar seus testes
apodrecerem, seu código também apodrecerá”
![Page 131: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/131.jpg)
Fique atento aos Maus cheiros
![Page 132: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/132.jpg)
- 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
![Page 133: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/133.jpg)
- Duplicação- Inconsistência- Intenção obscura- Variáveis e funções inexpressivas- Despadronização- Números mágicos- Desencapsulamento- Efeitos colaterais- Testes inuficientes
![Page 134: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/134.jpg)
Você não se torna um bom programador aprendendo uma lista de regras.
Clean code não foi escrito para ser 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.
Conclusão
![Page 135: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/135.jpg)
“Você é responsável pelo código que escreve”
![Page 136: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/136.jpg)
Referências
![Page 137: Clean Code - Desenvolvendo como um Profissional Ágil](https://reader031.vdocuments.mx/reader031/viewer/2022020710/54442b2fb1af9fbc0e8b47e5/html5/thumbnails/137.jpg)
Muito Obrigado!
@andrefariahttp://blog.andrefaria.com
http://blog.bluesoft.com.br
@bruno_luihttp://brunolui.com