CLEAN CODE Frescura ou necessidade?       Thiago Faria        @ThiagoFAndrade        www.algaworks.com
Está cheio de lambanças        por aí...
Merece um 10           http://www.flickr.com/photos/ricksphotos101/3510477227/
Merece um 10           http://www.flickr.com/photos/ricksphotos101/3510477227/
Boa ideia!             http://www.flickr.com/photos/kwramsauer/2787249358/
Boa ideia!             http://www.flickr.com/photos/kwramsauer/2787249358/
Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
OMFG!        http://www.flickr.com/photos/officeglen/83359172/
OMFG!        http://www.flickr.com/photos/officeglen/83359172/
OMFG!        http://www.flickr.com/photos/officeglen/83359172/
E nós, programadores?     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
E nós, programadores?     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
E nós, programadores?     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
Java Programmer                                                                Web DesignerUI Programmer                Co...
Porque priorizamos apenas   código que funciona?
• Cronogramas apertados
• Cronogramas apertados• Usuários com necessidades urgentes
• Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente
• Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente• “Quero mostrar que sou produtivo”
Código ruim custa caro                 http://www.flickr.com/photos/amagill/3366720659/
Código ruim custa caro                 http://www.flickr.com/photos/amagill/3366720659/
Código ruim dá preguiça            http://spirithalloween.com/images/spirit/products/processed/00593418.detail.a.jpg
Código ruim gera frustração                    http://www.flickr.com/photos/zachklein/54389823/
Código ruim precisa de muitos, mas muitos      remendos                   http://www.pinbax.com/items/4566.jpg
Código ruim precisa de muitos, mas muitos      remendos                   http://www.pinbax.com/items/4566.jpg
Código ruim gera lentidão       (baixa produtividade)                               http://www.flickr.com/photos/johnlamb/2...
Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
Produtividade vs Tempo                100                 75Produtividade                 50                 25           ...
Produtividade vs Tempo                100                 75Produtividade                 50                 25           ...
Produtividade vs Tempo                100                 75                                                              ...
http://www.flickr.com/photos/michigancommunities/5169810229/
O que podemos fazer paramelhorar nossa produtividade?          http://www.flickr.com/photos/michigancommunities/5169810229/
Coloque mais  pressão!                O que podemos fazer para               melhorar nossa produtividade?                ...
Coloque mais  pressão!                O que podemos fazer para               melhorar nossa produtividade?                ...
http://www.flickr.com/photos/worldofoddy/757149070/
Mais pessoas para ajudar a    fazer código sujo            http://www.flickr.com/photos/worldofoddy/757149070/
Código ruim pode matar      um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr....
Código ruim pode matar      um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr....
Código ruim pode destruir      uma empresa http://www.flickr.com/photos/penguincakes/4074411788/
Tem gente que acha que código ruimpode acabar com o mundo!                          http://good-wallpapers.com/pictures/36...
A culpa é nossa  http://www.artsjournal.com/aboutlastnight/pointing-finger.jpg
Sintomas de código ruim
Inflexívelhttp://infosurhoy.com/cocoon/saii/images/2012/06/08/photo4D.jpg
Frágilhttp://www.flickr.com/photos/ocreactive/2280732355/
Inseparávelhttp://www.flickr.com/photos/momono/4459805690/
Opacohttp://www.flickr.com/photos/avlxyz/5432778291/
http://commadot.com/wp-content/uploads/2009/02/wtf.png
O que é código limpo?Bjarne Stroustrup                     Grady Booch                        Michael Feathers            ...
O que é código limpo?Elegante e eficiente. Código limpo faz  bem uma coisa.        Bjarne Stroustrup                     Gr...
O que é código limpo?Elegante e eficiente.              Simples e direto. Código limpo faz                Pode ser lido com...
O que é código limpo?Elegante e eficiente.              Simples e direto.                           Parece ter sido Código ...
O que é código limpo?Elegante e eficiente.              Simples e direto.                           Parece ter sido        ...
A regra do escoteiro“   Sempre deixe a área de acampamento mais                                                           ...
A regra do escoteiro  “   Sempre deixe a área de acampamento mais                                                         ...
Algumas técnicas     by Uncle Bob
Nomes significativos   • Revelam a intenção   • Devem ser pronunciáveis   • Fácil de pesquisar   • Evite nomes confusos
int d; // tempo gasto em dias
Não revela sua intençãoint d; // tempo gasto em dias        Se precisa de um comentário para          explicar isso, algo ...
Não revela sua intençãoint d; // tempo gasto em dias        Se precisa de um comentário para          explicar isso, algo ...
class Processar
Nomes de classes não                   devem ser verbosclass Processar
Nomes de classes não                     devem ser verbosclass Processarclass Processador      Processador de que?
Nomes de classes não                     devem ser verbosclass Processarclass Processador      Processador de que?class Pr...
class Fornecedor {   public void pagamento() {
Nomes de métodos devem ser                           verbosclass Fornecedor {   public void pagamento() {
Nomes de métodos devem ser                           verbosclass Fornecedor {   public void pagamento() {class Fornecedor ...
class PedComp {   private Date prvEnt;}
Difícil de ler, entender e pronunciarclass PedComp {   private Date prvEnt;}
Difícil de ler, entender e pronunciarclass PedComp {   private Date prvEnt;}class PedidoCompra {   private Date dataPrevis...
for (int i = 0; i < 10; i++) {   t[i] += p[i];}
Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) {   t[i] += p[i];}
Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) {   t[i] += p[i];}for (int i = 0; i < 10; i++) {   totais[i] +=...
Funções• Devem ser pequenas• Menores do que você imaginou• Devem fazer apenas uma coisa• Nível de identação não deve ser m...
public boolean validarSenha(String nomeUsuario, String senha) {   ...   if (usuario.getSenhaAtual().equals(senha) {       ...
public boolean validarSenha(String nomeUsuario, String senha) {   ...   if (usuario.getSenhaAtual().equals(senha) {       ...
void cadastrar(String nome, String email, int idade, double peso) {   ...}
Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) {   ...}
Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) {   ...}void cadastrar(Paciente pacien...
Comentários• São úteis se forem colocados nos lugares certos• Comentários não são atualizados, e por isso mentem e    não ...
// verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
// verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {           Expli...
/**  * Construtor da classe.  */public Lancamento() {}
Sério?/**  * Construtor da classe.  */public Lancamento() {}
Sério?/**  * Construtor da classe.  */public Lancamento() {}                   Ahhh tá! Achei que era o/** * Dia do mês.  ...
Holy shit!try {   while (...) {      System.out.println(...);   } // while} // trycatch (SQLException e) {   e.printStackT...
Use controle de versãotry {   while (...) {      // adicionado por João das Couves      System.out.println(...);   }} catc...
Formatação• Classes menores são mais fáceis de entender• Conceitos relacionados devem ficar próximos• Sempre idente bem o c...
class Produto {   private int          codigo;   private Fornecedor   fornecedor;   private String       descricao;   priv...
class Produto {   private int          codigo;   private Fornecedor   fornecedor;   private String       descricao;   priv...
class Produto {   private int          codigo;   private Fornecedor   fornecedor;   private String       descricao;   priv...
public double calcular(int a,int b,int c){  double total=numero+(valor*outroValor);
Use espaços entre operadores,                      parâmetros e vírgulaspublic double calcular(int a,int b,int c){  double...
Use espaços entre operadores,                      parâmetros e vírgulaspublic double calcular(int a,int b,int c){  double...
Exceções• Lance exceções ao invés de retornar código de erro• Crie exceções com informações sobre o erro• Evite criar méto...
Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) {   notificarPendencia(cliente.getEmail());}
Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) {   notificarPendencia(cliente...
Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) {   notificarPendencia(cliente...
Testes unitários• Considere usar TDD• Mantenha os testes limpos
Classes• Organize as declarações de variáveis e métodos• Classes devem ser pequenas• Princípio da Responsabilidade Única -...
class Cliente {   void cadastrar()   void emitirNotaFiscal()}
Muitas responsabilidadesclass Cliente {   void cadastrar()   void emitirNotaFiscal()}
Muitas responsabilidadesclass Cliente {   void cadastrar()   void emitirNotaFiscal()}class Cliente {   void cadastrar()}cl...
www.cleancoders.com
GRACIAS. Thiago Faria  @ThiagoFAndrade  www.algaworks.com
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Próximos SlideShares
Carregando em…5
×

Clean Code - Frescura ou necessidade?

2.154 visualizações

Publicada em

Palestra sobre Clean Code, ministrada no Maré de Agilidade (Uberlândia) em Agosto/2012.

Publicada em: Tecnologia
0 comentários
15 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.154
No SlideShare
0
A partir de incorporações
0
Número de incorporações
71
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
15
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • A &amp;#xFA;nica coisa boa de c&amp;#xF3;digo ruim:\nC&amp;#xF3;digo sujo rende boas piadas sobre quem fez enquanto ele existir ;)\n
  • \n
  • os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  • os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  • os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  • os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  • A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  • A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  • A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  • A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  • Mais press&amp;#xE3;o nos devs - s&amp;#xF3; piora a situa&amp;#xE7;&amp;#xE3;o, faz ainda mais c&amp;#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&amp;#xE3;o\nContratar mais pessoas - PR&amp;#xD3;XIMO SLIDE\n
  • Mais press&amp;#xE3;o nos devs - s&amp;#xF3; piora a situa&amp;#xE7;&amp;#xE3;o, faz ainda mais c&amp;#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&amp;#xE3;o\nContratar mais pessoas - PR&amp;#xD3;XIMO SLIDE\n
  • Mais press&amp;#xE3;o nos devs - s&amp;#xF3; piora a situa&amp;#xE7;&amp;#xE3;o, faz ainda mais c&amp;#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&amp;#xE3;o\nContratar mais pessoas - PR&amp;#xD3;XIMO SLIDE\n
  • Contrata mais pessoas - novas pessoas precisam das antigas para entender o c&amp;#xF3;digo. Depois de um tempo come&amp;#xE7;am a ficar mais r&amp;#xE1;pidos para criar mais c&amp;#xF3;digo sujo\n
  • \n
  • \n
  • \n
  • \n
  • Falamos que vamos melhorar depois, mas nunca fazemos, e sabemos que nunca faremos\n
  • Como voc&amp;#xEA; sabe que um c&amp;#xF3;digo est&amp;#xE1; ruim?\n
  • - R&amp;#xED;gido - para incluir ou modificar uma &amp;#xFA;nica coisa, tem que alterar v&amp;#xE1;rios m&amp;#xF3;dulos, v&amp;#xE1;rias classes...\nVoc&amp;#xEA; nunca sabe quantos m&amp;#xF3;dulos precisa alterar, entao &amp;#xE9; dif&amp;#xED;cil estimar o esfor&amp;#xE7;o.\n
  • coisas param de funcionar quando voc&amp;#xEA; inclui ou altera uma outra coisa\nsistemas ficam inconfi&amp;#xE1;veis. todos percebem que o sistema nao &amp;#xE9; bom\n
  • M&amp;#xF3;dulos que nao podem ser separados para usar em outros lugares (reutiliza&amp;#xE7;&amp;#xE3;o)\nDif&amp;#xED;cil estimar, porque nunca se sabe se ser&amp;#xE1; poss&amp;#xED;vel reutilizar\n
  • nao comunica a intencao do desenvolvedor\n dificil ler, entender e mudar\n
  • \n
  • aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  • aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  • aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  • aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • &amp;#xC9; uma mentira. Promete fazer uma coisa, e faz outra de forma oculta.\n
  • &amp;#xC9; uma mentira. Promete fazer uma coisa, e faz outra de forma oculta.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Prefira lan&amp;#xE7;ar exce&amp;#xE7;&amp;#xE3;o a retornar null.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • p&amp;#xFA;blicas est&amp;#xE1;ticas e constantes\nprivadas est&amp;#xE1;ticas e vari&amp;#xE1;veis\nprivadas inst&amp;#xE2;ncias e vari&amp;#xE1;veis\nfun&amp;#xE7;&amp;#xF5;es\nSRP - classes devem ter uma, apenas uma raz&amp;#xE3;o para ser modificada\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Clean Code - Frescura ou necessidade?

    1. 1. CLEAN CODE Frescura ou necessidade? Thiago Faria @ThiagoFAndrade www.algaworks.com
    2. 2. Está cheio de lambanças por aí...
    3. 3. Merece um 10 http://www.flickr.com/photos/ricksphotos101/3510477227/
    4. 4. Merece um 10 http://www.flickr.com/photos/ricksphotos101/3510477227/
    5. 5. Boa ideia! http://www.flickr.com/photos/kwramsauer/2787249358/
    6. 6. Boa ideia! http://www.flickr.com/photos/kwramsauer/2787249358/
    7. 7. Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
    8. 8. Parabéns!http://www.flickr.com/photos/william_veerbeek/3875437689/
    9. 9. OMFG! http://www.flickr.com/photos/officeglen/83359172/
    10. 10. OMFG! http://www.flickr.com/photos/officeglen/83359172/
    11. 11. OMFG! http://www.flickr.com/photos/officeglen/83359172/
    12. 12. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
    13. 13. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
    14. 14. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
    15. 15. Java Programmer Web DesignerUI Programmer Como você quer ser lembrado? http://www.flickr.com/photos/rajthesnapper/2418728391/
    16. 16. Porque priorizamos apenas código que funciona?
    17. 17. • Cronogramas apertados
    18. 18. • Cronogramas apertados• Usuários com necessidades urgentes
    19. 19. • Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente
    20. 20. • Cronogramas apertados• Usuários com necessidades urgentes• Pressão do gerente• “Quero mostrar que sou produtivo”
    21. 21. Código ruim custa caro http://www.flickr.com/photos/amagill/3366720659/
    22. 22. Código ruim custa caro http://www.flickr.com/photos/amagill/3366720659/
    23. 23. Código ruim dá preguiça http://spirithalloween.com/images/spirit/products/processed/00593418.detail.a.jpg
    24. 24. Código ruim gera frustração http://www.flickr.com/photos/zachklein/54389823/
    25. 25. Código ruim precisa de muitos, mas muitos remendos http://www.pinbax.com/items/4566.jpg
    26. 26. Código ruim precisa de muitos, mas muitos remendos http://www.pinbax.com/items/4566.jpg
    27. 27. Código ruim gera lentidão (baixa produtividade) http://www.flickr.com/photos/johnlamb/2576062549/
    28. 28. Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
    29. 29. Produtividade vs Tempo 100 75Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
    30. 30. Produtividade vs Tempo 100 75Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
    31. 31. Produtividade vs Tempo 100 75 ?Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
    32. 32. http://www.flickr.com/photos/michigancommunities/5169810229/
    33. 33. O que podemos fazer paramelhorar nossa produtividade? http://www.flickr.com/photos/michigancommunities/5169810229/
    34. 34. Coloque mais pressão! O que podemos fazer para melhorar nossa produtividade? http://www.flickr.com/photos/michigancommunities/5169810229/
    35. 35. Coloque mais pressão! O que podemos fazer para melhorar nossa produtividade? Vamos contratar mais pessoas... http://www.flickr.com/photos/michigancommunities/5169810229/
    36. 36. http://www.flickr.com/photos/worldofoddy/757149070/
    37. 37. Mais pessoas para ajudar a fazer código sujo http://www.flickr.com/photos/worldofoddy/757149070/
    38. 38. Código ruim pode matar um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
    39. 39. Código ruim pode matar um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
    40. 40. Código ruim pode destruir uma empresa http://www.flickr.com/photos/penguincakes/4074411788/
    41. 41. Tem gente que acha que código ruimpode acabar com o mundo! http://good-wallpapers.com/pictures/3632/End%20of%20the%20World.jpg
    42. 42. A culpa é nossa http://www.artsjournal.com/aboutlastnight/pointing-finger.jpg
    43. 43. Sintomas de código ruim
    44. 44. Inflexívelhttp://infosurhoy.com/cocoon/saii/images/2012/06/08/photo4D.jpg
    45. 45. Frágilhttp://www.flickr.com/photos/ocreactive/2280732355/
    46. 46. Inseparávelhttp://www.flickr.com/photos/momono/4459805690/
    47. 47. Opacohttp://www.flickr.com/photos/avlxyz/5432778291/
    48. 48. http://commadot.com/wp-content/uploads/2009/02/wtf.png
    49. 49. O que é código limpo?Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
    50. 50. O que é código limpo?Elegante e eficiente. Código limpo faz bem uma coisa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
    51. 51. O que é código limpo?Elegante e eficiente. Simples e direto. Código limpo faz Pode ser lido como bem uma coisa. uma conversa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
    52. 52. O que é código limpo?Elegante e eficiente. Simples e direto. Parece ter sido Código limpo faz Pode ser lido como escrito por alguém bem uma coisa. uma conversa. que se importa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
    53. 53. O que é código limpo?Elegante e eficiente. Simples e direto. Parece ter sido Cada rotina que Código limpo faz Pode ser lido como escrito por alguém você lê faz o que bem uma coisa. uma conversa. que se importa. você espera. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
    54. 54. A regra do escoteiro“ Sempre deixe a área de acampamento mais ” limpa que já estava. — Robert Stephenson Smyth Baden-Powell http://www.flickr.com/photos/zoovroo/2751792596/
    55. 55. A regra do escoteiro “ Sempre deixe a área de acampamento mais ” limpa que já estava. — Robert Stephenson Smyth Baden-PowellSempre deixe um código mais limpo que já estava. http://www.flickr.com/photos/zoovroo/2751792596/
    56. 56. Algumas técnicas by Uncle Bob
    57. 57. Nomes significativos • Revelam a intenção • Devem ser pronunciáveis • Fácil de pesquisar • Evite nomes confusos
    58. 58. int d; // tempo gasto em dias
    59. 59. Não revela sua intençãoint d; // tempo gasto em dias Se precisa de um comentário para explicar isso, algo está errado!
    60. 60. Não revela sua intençãoint d; // tempo gasto em dias Se precisa de um comentário para explicar isso, algo está errado!int tempoGastoEmDias;
    61. 61. class Processar
    62. 62. Nomes de classes não devem ser verbosclass Processar
    63. 63. Nomes de classes não devem ser verbosclass Processarclass Processador Processador de que?
    64. 64. Nomes de classes não devem ser verbosclass Processarclass Processador Processador de que?class ProcessadorDeRelatorio
    65. 65. class Fornecedor { public void pagamento() {
    66. 66. Nomes de métodos devem ser verbosclass Fornecedor { public void pagamento() {
    67. 67. Nomes de métodos devem ser verbosclass Fornecedor { public void pagamento() {class Fornecedor { public void pagar() {
    68. 68. class PedComp { private Date prvEnt;}
    69. 69. Difícil de ler, entender e pronunciarclass PedComp { private Date prvEnt;}
    70. 70. Difícil de ler, entender e pronunciarclass PedComp { private Date prvEnt;}class PedidoCompra { private Date dataPrevisaoEntrega;}
    71. 71. for (int i = 0; i < 10; i++) { t[i] += p[i];}
    72. 72. Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) { t[i] += p[i];}
    73. 73. Confuso e difícil de pesquisarfor (int i = 0; i < 10; i++) { t[i] += p[i];}for (int i = 0; i < 10; i++) { totais[i] += precos[i];}
    74. 74. Funções• Devem ser pequenas• Menores do que você imaginou• Devem fazer apenas uma coisa• Nível de identação não deve ser maior que 2• Sem parâmetros é melhor, 2 é bom, evite 3• Don’t Repeat Yourself (DRY)
    75. 75. public boolean validarSenha(String nomeUsuario, String senha) { ... if (usuario.getSenhaAtual().equals(senha) { return true; } usuario.bloquear(); return false;}
    76. 76. public boolean validarSenha(String nomeUsuario, String senha) { ... if (usuario.getSenhaAtual().equals(senha) { return true; } usuario.bloquear(); return false;} Métodos não devem ter efeitos colaterais
    77. 77. void cadastrar(String nome, String email, int idade, double peso) { ...}
    78. 78. Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) { ...}
    79. 79. Muitos parâmetros!void cadastrar(String nome, String email, int idade, double peso) { ...}void cadastrar(Paciente paciente) { ...}
    80. 80. Comentários• São úteis se forem colocados nos lugares certos• Comentários não são atualizados, e por isso mentem e não são confiáveis• Comentários não fazem código ruim ficar melhor
    81. 81. // verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
    82. 82. // verifica se conta está usando cheque especialif (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) { Explique-se com códigoif (conta.estaUsandoChequeEspecial()) {
    83. 83. /** * Construtor da classe. */public Lancamento() {}
    84. 84. Sério?/** * Construtor da classe. */public Lancamento() {}
    85. 85. Sério?/** * Construtor da classe. */public Lancamento() {} Ahhh tá! Achei que era o/** * Dia do mês. dia do século... */private int diaDoMes;
    86. 86. Holy shit!try { while (...) { System.out.println(...); } // while} // trycatch (SQLException e) { e.printStackTrace();} // catchfinally { conexao.close();} // finally
    87. 87. Use controle de versãotry { while (...) { // adicionado por João das Couves System.out.println(...); }} catch (SQLException e) { // Autora: Maria Abadia e.printStackTrace();} finally { // Fechando a conexão (Sebastião) conexao.close();}
    88. 88. Formatação• Classes menores são mais fáceis de entender• Conceitos relacionados devem ficar próximos• Sempre idente bem o código• Limite o tamanho de uma linha (sugestão de 120 caracteres)• Combine um estilo de formatação entre a equipe
    89. 89. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}
    90. 90. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}
    91. 91. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra;}
    92. 92. public double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);
    93. 93. Use espaços entre operadores, parâmetros e vírgulaspublic double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);
    94. 94. Use espaços entre operadores, parâmetros e vírgulaspublic double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);public double calcular(int a, int b, int c) { double total = numero + (valor * outroValor);
    95. 95. Exceções• Lance exceções ao invés de retornar código de erro• Crie exceções com informações sobre o erro• Evite criar métodos que retornam null• Não passe null como parâmetro
    96. 96. Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) { notificarPendencia(cliente.getEmail());}
    97. 97. Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) { notificarPendencia(cliente.getEmail());}
    98. 98. Parece bom...Cliente cliente = repositorioClientes.buscarPorCodigo(10);if (cliente != null) { notificarPendencia(cliente.getEmail());} Mas pode ficar melhor, se o método lançar exceção ao invés de retornar nullCliente cliente = repositorioClientes.buscarPorCodigo(10);notificarPendencia(cliente.getEmail());
    99. 99. Testes unitários• Considere usar TDD• Mantenha os testes limpos
    100. 100. Classes• Organize as declarações de variáveis e métodos• Classes devem ser pequenas• Princípio da Responsabilidade Única - SRP
    101. 101. class Cliente { void cadastrar() void emitirNotaFiscal()}
    102. 102. Muitas responsabilidadesclass Cliente { void cadastrar() void emitirNotaFiscal()}
    103. 103. Muitas responsabilidadesclass Cliente { void cadastrar() void emitirNotaFiscal()}class Cliente { void cadastrar()}class NotaFiscal { void emitir()}
    104. 104. www.cleancoders.com
    105. 105. GRACIAS. Thiago Faria @ThiagoFAndrade www.algaworks.com

    ×