SlideShare uma empresa Scribd logo
1 de 137
Baixar para ler offline
Clean Code
         ’
Desenvolvendo como um Profissional Agil
 André Faria            Bruno Lui
 @andrefaria           @bruno_lui
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
Bruno Lui
             Desenvolvedor na Bluesoft
+5 Anos no Desenvolvimento de Software




              @brunolui
              http://brunolui.com
Então você quer ser
um desenvolvedor de
     software
   profissional?
Quer que as mães
apontem para você e
digam a seus filhos
para que sejam como
       você?
Cuidado com o
que você Pede!
Profissionalismo é
sem dúvida digno
   de honra e
  orgulho, mas
    também é
 responsabilidade.
Você não pode se orgulhar de algo
 pelo qual não se responsabiliza...
É muito mais fácil ser um
largado... Não se responsabilizar
 pelo trabalho e pela carreira....
Quando um
não-profissional faz
 uma besteira, seu
empregador limpa a
     bagunça...
Quando um profissional
 faz uma besteira, ele
   limpa a bagunça!
O que você faz para escrever
  software sem defeitos?
Você se responsabiliza pelos defeitos
                             que cria?
Escrever testes é essencial para
garantir que seu software funciona...
Como você pode dizer
que é responsável se
  não os escreve?
“Toda a linha de código que você
 escreve deve estar testada, e
         Ponto Final!”
                Uncle Bob
Código escrito por
profissionais pode ser
alterado sem custos
    exorbitantes!
Em outras palavras,
    você também é
   responsável pela
estrutura do código que
       escreve!
Sua carreira é sua
    responsabilidade!

   Leia     Treine

  Vá a conferências

Não é responsabilidade
 do seu empregador
Sua empresa te ajuda
       com isso?

 Ótimo! Estão te
fazendo um favor.
Mas a
responsabilidade
 ainda é sua!
Também não é responsabilidade do seu
empregador te dar “tempo” para você estudar...
“Você recebe por 40
horas para resolver
os problemas da sua
  empresa não os
      seus...”
           Uncle Bob
Faça as contas....
Sua semana tem 168 horas.
Dê à seu
empregador
40, e à sua
carreira 20
Sobram 108
+ 56 para dormir
  48
+ 52 para ...
  60
Só não desperdice...
Durante essas 20
 horas você deve
estar fazendo algo
  que gosta, que
aumente ainda mais
a sua paixão pelo
     que faz.
Esse é o grande
    segredo!
Além disso,
   o desenvolvedor
profissional de verdade
 se preocupa com o
 código que escreve...
...desenvolve somente código
limpo e não consegue mais
   escrever código ruim.
Ninguém gosta de encontrar
     um código ruim !
Raiva
Perda de Tempo
Frustração
Dor
Você fica P...
Mas afinal, o
 que é um
código limpo?
O que é um código limpo ?

Simples
Direto
Eficiente
Sem duplicidade
Elegante
Feito com cuidado
N om   es
       nific ati vos
s   ig

Escolhemos nomes
para tudo, então
devemos fazer
isso bem feito
O nome deve dizer...

- Por que existe;
- O que faz;
- Como é usado;
Use nomes que revelem sua intenção
int d;       // days




Se um nome de classe ou método requer um
comentário, ele não está revelando sua intenção
Faça distinções
      significativas


a1?
       a2?
int d?
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.
Use nome
           s
 fáceis de
encontrar
Use nome
            s
pronunciáv
           eis
private Timestamp genDMYHS()




        Pronuncie seu código


private Timestamp generateTimestamp()
e pa  lavras
Evit
       não    são
 que
      palavras
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”
Evite palavras que podem
ser variáveis ou palavras
 reservadas em outras
      plataformas



     Evite desinformação
Evite dar nomes como
“listaDeLancamentos”, o tipo
não precisa estar no nome
     (notação húngara)



      Evite desinformação
Evite trocadilhos, escreva
exatamente o que você
        quer dizer




     Evite desinformação
prát icas
  B oas

Nomes de classes devem ser
substantivos e não devem conter verbos



Nomes de métodos devem conter verbos
Class es        odos
           M ét
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.
método <= 20 linhas
 linha <= 100 caracteres
classe = 200 a 500 linhas
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
efin ir o
           é d
O  difícil           uma
           ape  nas
       é “
 que
            co isa”
Tentar extrair um novo método de
um outro, e dar um nome ao trecho
extraído é uma maneira de identificar
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.
Cuidado com os   efeitos colaterais.
Eles são mentiras contadas pelo método,
quando diz que fará uma coisa, mas faz
          outras “escondidas”.
public boolean checkPassword (String password) {
      String passwordStatus = crypto.decrypt(password);
      if (passwordStatus.equals(“OK”)) {
          Session.initialize();
          return true;
      }
      return false;
 }
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.
DRY - Don’t Repeat Yourself

Preste atenção no código repetido. Evite duplicidades
reaproveitando seus métodos.
Para saber se o
tamanho da classe é
  o ideal, devemos
   analisar suas
 responsabilidades.
Princípio da única da responsabilidade (SRP)

O princípio diz que uma
classe deve ter uma, e
apenas uma razão para
        mudar.
Tentar identificar
 responsabilidades
  ajuda a melhorar
nosso código e criar
melhores abstrações
  Esse é um dos
  conceitos mais
importantes em OO
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.
Comentários
Comentários pode
                 m
 ser mentirosos
                 e
       trazer
   desinformação,
mesmo sem inte
              nção;
Ele não recebem
“man  utenção”, sendo
   que quanto mais
velhos maior a chance
 de e starem errados.
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.
// check if the employee is eligible for benefits
if ((employee.flags == 100) && (employee.age > 65))




           Explique-se no código!


 if (employee.isEligibleForBenefits())
Closing brace comments


try {
        String nada;
        while (i = 3) {
             i++;
             ...

     } // end while
} // end if
utras
                            ça v ocê olhar para o
“Qualquer c omentário que fa                         que
                               lo, não vale os bits
partes do cód igo para entendê-

consome”.                                      Uncle Bob
Comentários podem ser úteis...

                      Aviso de
                 consequências que
                  um trecho de código
                   pode vir a causar
Com entários podem ser úteis...




   Mostrar a intenção
  por trás de uma decisão
   tomada, e não só pela
        informação.
Nunca deixe
código comentado!


  Quando alguém vê um código
                             de
comentado, não tem coragem
                            um
apagá-lo. Vão pensar que há
     motivo para estar ali.
matação
Fo   r
“Formatação é importante, pois se
      trata de Comunicação.”
   Boa Comunicação é essencial para os
      desenvolvedores profissionais
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
Métodos com conceitos relacionados devem
       ficar verticalmente próximos
A ordem dos métodos cria um fluxo de
leitura melhorando a legibilidade do código
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.
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) {
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);
  }
tam ento
T ra
   de erros
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
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.
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.
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();
}
Não retorne null

    Prefira retornar
  Special case objects
  ou vazio no caso de
        coleções
Não passe null

 Evite passar null para
  seus métodos, isso
     pode gerar as
        famosas
  NullPointerExceptions
Testes
unitários
As Três Leis do TDD
As Três Leis do TDD


1 - Você não pode escrever o código
até que tenha criado um teste
falhando.
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.
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.
1   conceito por teste


Separe um teste que esteja
    testando mais de um
conceito em outros testes.




Facilite o entendimento
     de cada teste.
Te  stes
F.I.R .S.T
Fast    Os testes devem ser
        rápidos para executar,
       pois quando são lentos
       a frequência de execução
               diminui.
Testes não podem depender
 uns dos outros, pois se um
  falha os outros também
          falharam




Independent
R epeatable
        Ao executa-los mais de uma vez, devem
         sempre retornar o mesmo resultado
Self-Validating
  Devem possuir respostas
  booleanas, sem precisar de
  interpretação para saber o
          resultado.
T imely
  Os testes devem ser
 escritos antes do código.
 Após o código será mais
   difícil fazer o teste.
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.
Quanto mais sujo o
  teste mais difícil dar
manutenção, e menor a
flexibilidade para alterá-lo.
“Se você deixar
  seus testes
apodrecerem, seu
 código também
  apodrecerá”
Fique atento
aos Maus
  cheiros
- 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
- Duplicação

- Inconsistência

- Intenção obscura

- Variáveis e funções inexpressivas

- Despadronização

- Números mágicos

- Desencapsulamento

- Efeitos colaterais

- Testes inuficientes
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.
“Você é responsável pelo
 código que escreve”
Referências
Muito Obrigado!




 @andrefaria                            @bruno_lui
http://blog.andrefaria.com              http://brunolui.com
                    http://blog.bluesoft.com.br

Mais conteúdo relacionado

Último

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Destaque

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destaque (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
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ê?
  • 6. Cuidado com o que você Pede!
  • 7. Profissionalismo é sem dúvida digno de honra e orgulho, mas também é responsabilidade.
  • 8. Você não pode se orgulhar de algo pelo qual não se responsabiliza...
  • 9. É muito mais fácil ser um largado... Não se responsabilizar pelo trabalho e pela carreira....
  • 10. Quando um não-profissional faz uma besteira, seu empregador limpa a bagunça...
  • 11. Quando um profissional faz uma besteira, ele limpa a bagunça!
  • 12. O que você faz para escrever software sem defeitos?
  • 13. Você se responsabiliza pelos defeitos que cria?
  • 14. Escrever testes é essencial para garantir que seu software funciona...
  • 15. Como você pode dizer que é responsável se não os escreve?
  • 16. “Toda a linha de código que você escreve deve estar testada, e Ponto Final!” Uncle Bob
  • 17. Código escrito por profissionais pode ser alterado sem custos exorbitantes!
  • 18. Em outras palavras, você também é responsável pela estrutura do código que escreve!
  • 19. Sua carreira é sua responsabilidade! Leia Treine Vá a conferências Não é responsabilidade do seu empregador
  • 20. Sua empresa te ajuda com isso? Ótimo! Estão te fazendo um favor.
  • 22. Também não é responsabilidade do seu empregador te dar “tempo” para você estudar...
  • 23. “Você recebe por 40 horas para resolver os problemas da sua empresa não os seus...” Uncle Bob
  • 25. Sua semana tem 168 horas.
  • 26. Dê à seu empregador 40, e à sua carreira 20
  • 28. + 56 para dormir 48
  • 29. + 52 para ... 60
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 48.
  • 49. Durante essas 20 horas você deve estar fazendo algo que gosta, que aumente ainda mais a sua paixão pelo que faz.
  • 50. Esse é o grande segredo!
  • 51. Além disso, o desenvolvedor profissional de verdade se preocupa com o código que escreve...
  • 52. ...desenvolve somente código limpo e não consegue mais escrever código ruim.
  • 53. Ninguém gosta de encontrar um código ruim !
  • 54. Raiva
  • 57. Dor
  • 59. Mas afinal, o que é um código limpo?
  • 60. O que é um código limpo ? Simples Direto Eficiente Sem duplicidade Elegante Feito com cuidado
  • 61. N om es nific ati vos s ig Escolhemos nomes para tudo, então devemos fazer isso bem feito
  • 62. O nome deve dizer... - Por que existe; - O que faz; - Como é usado;
  • 63. Use nomes que revelem sua intenção
  • 64. int d; // days Se um nome de classe ou método requer um comentário, ele não está revelando sua intenção
  • 65. Faça distinções significativas a1? a2? int d?
  • 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.
  • 67. Use nome s fáceis de encontrar
  • 68. Use nome s pronunciáv eis
  • 69. private Timestamp genDMYHS() Pronuncie seu código private Timestamp generateTimestamp()
  • 70. e pa lavras Evit não são que palavras
  • 71. 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”
  • 72. Evite palavras que podem ser variáveis ou palavras reservadas em outras plataformas Evite desinformação
  • 73. Evite dar nomes como “listaDeLancamentos”, o tipo não precisa estar no nome (notação húngara) Evite desinformação
  • 74. Evite trocadilhos, escreva exatamente o que você quer dizer Evite desinformação
  • 75. prát icas B oas Nomes de classes devem ser substantivos e não devem conter verbos Nomes de métodos devem conter verbos
  • 76. Class es odos M ét
  • 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”.
  • 84. public boolean checkPassword (String password) { String passwordStatus = crypto.decrypt(password); if (passwordStatus.equals(“OK”)) { Session.initialize(); return true; } return false; }
  • 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.
  • 89. Tentar identificar responsabilidades ajuda a melhorar nosso código e criar melhores abstrações Esse é um dos conceitos mais importantes em OO
  • 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())
  • 96. Closing brace comments try { String nada; while (i = 3) { i++; ... } // end while } // end if
  • 97. utras ça v ocê olhar para o “Qualquer c omentário que fa que lo, não vale os bits partes do cód igo para entendê- consome”. Uncle Bob
  • 98. Comentários podem ser úteis... Aviso de consequências que um trecho de código pode vir a causar
  • 99. Com entários podem ser úteis... Mostrar a intenção por trás de uma decisão tomada, e não só pela informação.
  • 100. Nunca deixe código comentado! Quando alguém vê um código de comentado, não tem coragem um apagá-lo. Vão pensar que há motivo para estar ali.
  • 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
  • 104. Métodos com conceitos relacionados devem ficar verticalmente próximos
  • 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); }
  • 109. tam ento T ra de erros
  • 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
  • 117. As Três Leis do TDD
  • 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.
  • 122. Te stes F.I.R .S.T
  • 123. Fast Os testes devem ser rápidos para executar, pois quando são lentos a frequência de execução diminui.
  • 124. Testes não podem depender uns dos outros, pois se um falha os outros também falharam Independent
  • 125. R epeatable Ao executa-los mais de uma vez, devem sempre retornar o mesmo resultado
  • 126. Self-Validating Devem possuir respostas booleanas, sem precisar de interpretação para saber o resultado.
  • 127. T imely Os testes devem ser escritos antes do código. Após o código será mais difícil fazer o teste.
  • 128. 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.
  • 129. Quanto mais sujo o teste mais difícil dar manutenção, e menor a flexibilidade para alterá-lo.
  • 130. “Se você deixar seus testes apodrecerem, seu código também apodrecerá”
  • 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
  • 133. - Duplicação - Inconsistência - Intenção obscura - Variáveis e funções inexpressivas - Despadronização - Números mágicos - Desencapsulamento - Efeitos colaterais - Testes inuficientes
  • 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.
  • 135. “Você é responsável pelo código que escreve”
  • 137. Muito Obrigado! @andrefaria @bruno_lui http://blog.andrefaria.com http://brunolui.com http://blog.bluesoft.com.br