SlideShare a Scribd company logo
1 of 72
CLEAN CODE
  escrevendo código limpo
DISCLAIMER
OVERVIEW
SOBRE O QUE FALAREI

• nomenclaturas   • objetos

• funções         • estrutura   de dados

• classes         • tratamento       de exceções

• formatação      • boundaries

• comentários     • unit   testing
SOBRE O QUE NÃO FALAREI

 • dependency    injection   • emergência

 • TDD                       • concorrência

 • refactoring               • frameworks   de teste
fonte: http://www.osnews.com/story/19266/WTFs_m
O QUE É UM CÓDIGO LIMPO?

• direto   ao ponto         • padrões   definidos

• mínimas    dependências   • de   fácil leitura/entendimento

• sem     duplicação        • coberto   de testes

• fácil   manutenção        • elegante         sindrome da janela
                                               quebrada
“NÃO SOU UM EXCELENTE DESENVOLVEDOR. SOU APENAS
UM DESENVOLVEDOR MEDIANO QUE SEGUE À RISCA AS BOAS
          PRÁTICAS DE UM CÓDIGO LIMPO.”
                              (um dev muito famoso)
NOMES SIGNIFICATIVOS
NOMES SIGNIFICATIVOS




                       Se o nome requer um
                       comentário, é um nome
                       ruim
USEM NOMES QUE REVELEM A INTENÇÃO
NOMES SIGNIFICATIVOS




                       1.   What kinds of things
                            are in theList?

                       2.   What is the significance
                            of the zeroth subscript
                            of an item in theList?

                       3.   What is the significance
                            of the value 4?

                       4.   How would I use the list
                            being returned?
USEM NOMES PRONUNCIÁVEIS
NOMES SIGNIFICATIVOS




            1.   Parte do nosso cérebro é dedicado ao conceito de palavras. e palavras, por definição,
                 são pronunciaveis; usemos essa parte do cérebro!

            2.   Programar é uma atividade social.

            3.   método Dê tê á Érre Cê Dê
USEM NOMES BUSCÁVEIS
NOMES SIGNIFICATIVOS




            1.   Muito mais facil encontrar WORK_DAYS_PER_WEEK DO QUE “5”
            2.   “SUM” não é de fato um nome muito útil, mas ao menos já é mais buscável do que
                 simplestemente “s”

            3.   CODE SMELL! MAGIC NUMBER!
TAMBÉM NOMEAMOS CLASSES E MÉTODOS
NOMES SIGNIFICATIVOS

CLASSES


em geral, classes devem ser representadas por substantivos, não verbos.
bons exemplos: Cliente, Perfil, Estoque, etc.




MÉTODOS


em geral, métodos devem ser representadas por verbos ou frases verbais
bons exemplos: enviarPagamento, removerPagina, salvar, etc. (prefira o infinitivo)
NÃO SEJA PIADISTA :)
FUNÇÕES
SEJA PEQUENO
FUNÇÕES




• menos      é sempre mais!

• extraia   trechos em métodos privados

• lembre-se   dos nomes significativos ;)

• vá   direto ao ponto
FUNÇÕES
FAÇA UMA ÚNICA COISA



blocos e endentação,
indicios de que está
fazendo muita coisa
FUNÇÕES




• repare   a endentação (sim, é assim que escreve ;)

• muitos   níveis ~= muita responsabilidade

•o   método deve fazer uma única coisa, e bem!

• dá   para extrair? está fazendo mais de uma coisa
LEIA O CÓDIGO DE CIMA PARA BAIXO



Como uma narrativa
FUNÇÕES




• seu   código deve ser lido como uma narrativa

• temos   sujeitos, verbos e predicados :)

• narrativas   são frases com uma ordem coerente

• lembre-se      disso ao extrair em métodos privados
FUNÇÕES E SEUS ARGUMENTOS
FUNÇÕES




• muitos     argumentos ~= code smell

• existem   algumas regras para qtd de argumentos

• argumentos   booleanos em geral não são bons

• ex:
FUNÇÕES
EVITE OS SIDE EFFECTS
FUNÇÕES   Onde está o side effect?
EXCEÇÕES SÃO MELHORES QUE CÓDIGOS DE ERRO
FUNÇÕES
DRY (DON’T REPEAT YOURSELF)
COMENTÁRIOS
   devem valer os bytes que
   consomem
COMENTÁRIOS NÃO AJUDAM UM CÓDIGO SUJO
COMENTÁRIOS                             “Ooh, I’d better comment that!”
                                        No! You’d better clean it!




• em   geral, servem para explicar um código ruim

• um   bom código é auto-documentado




• extraia   para um método que faça o que diz!
COMENTÁRIOS ACEITÁVEIS
COMENTÁRIOS
                            // format matched kk:mm:ss EEE, MMM dd, yyyy

                            Pattern timeMatcher = Pattern.compile(

                            "d*:d*:d* w*, w* d*, d*");




• comentários   sobre licença

• comentários   informativos

• necessidade   de explicação de intenção (negócio)
COMENTÁRIOS RUINS
COMENTÁRIOS
                            // format matched kk:mm:ss EEE, MMM dd, yyyy

                            Pattern timeMatcher = Pattern.compile(

                            "d*:d*:d* w*, w* d*, d*");




• por   falta do que escrever

• redundantes

• doc   em APIs não-públicas

• dizendo   algo que o próprio código deveria dizer

• código    comentado :/
COMENTÁRIOS
FORMATAÇÃO
pode ser interpretado
como uma coisa pessoal.
apesar disso, valem os
padroes entre times
O QUE VALE É A REGRA DO TIME
MAS EXISTEM ALGUNS PADRÕES DE LINGUAGENS
PYTHON: PEP8


explicar o pq da PEP 8,      é sempre bom saber qual   existem padroes para
sua importância para         o padrão da linguagem.    nomes de classe, nomes
pessoas que vão ler o        python tem um padrão,     de modulo, nomes de
codigo, etc.                 Java tem outro, C++ tem   metodos, variaveis,
                             outro                     constantes, etc.
E JAVASCRIPT?
LIMITES HORIZONTAIS


     explicar o pq da linha de
     limite horizontal.
ENDENTAÇÃO, QUEBRA DE LINHAS E TERNÁRIOS
E O IDIOMA?


leve em consideracao a
linguagem de dominio. por
exemplo, ficaria
estranho traduizer
“Folião”
OBJETOS E ESTRUTRA DE
       DADOS
ABSTRAÇÃO DE DADOS
OBJETOS E ESTRUTURAS DE DADOS




• objetos   expõem comportamentos e escondem
 dados

• estruturas
         de dados expõem seus dados e não têm
 comportamentos significativos
A LEI DE DEMETER
OBJETOS E ESTRUTURAS DE DADOS


• um   método f de uma classe C só conhece:

 • métodos    de C

 • objetos   criados por f

 • objetos   passados como argumentos para f

 • objetos   em variáveis de instância de C
vagão de trem
TRATAMENTO DE ERRO
EXCEÇÕES AO INVÉS DE CÓDIGO DE ERRO ;)
TRATAMENTO DE EXCEÇÃO É UMA DAS COISAS QUE UMA
              FUNÇÃO/MÉTODO FAZ


                   try except finally deve
                   ser o unico bloco de um
                   metodo
NÃO USE EXCEÇÕES GENÉRICAS



         conheça seu código. saiba
         que tipos de exceções
         podem ser disparadas. se
         nao conhece as exceções
         default, dê uma lida nelas
VOCÊ TAMBÉM PODE CRIAR EXCEÇÕES!



           se couber fazer uma
           exceção especifica, crie
           uma classe de Excecao
           sua que será usada em
           outros pontos do projeto
NÃO RETORNE NULL



    - obriga usos de if
    - pode disparar
    nullpointer
    - considere lancar uma
    exceção ou retornar um
    objeto especial
NÃO PASSE NULL


- obriga tratamento de nulo
- tira a legibilidade do código

algumas linguagens até facilitam
CLASSES
BASICAMENTE AS MESMAS DICAS DE FUNÇÕES ;)
PARTIU ALMOÇAR?

      :D
MUITO OBRIGADO


    @gustavocsb

More Related Content

What's hot

Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
Lei de Demeter parte
Lei de Demeter parteLei de Demeter parte
Lei de Demeter parteJorge Oleques
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...Joberto Diniz
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresTchelinux
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]Ricardo Silva
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 

What's hot (20)

Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Lei de Demeter parte
Lei de Demeter parteLei de Demeter parte
Lei de Demeter parte
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
 
Clean code
Clean codeClean code
Clean code
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
Clean Code
Clean CodeClean Code
Clean Code
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Ruby
RubyRuby
Ruby
 

Similar to Clean code

Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoPaulo Henrique da Silva
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passosGabrielly Gomes
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Community webcast
Community webcastCommunity webcast
Community webcastYan Justino
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 RefactoringWildtech
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4javamanrj
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmerRegis Melo
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 

Similar to Clean code (20)

Code Smells
Code SmellsCode Smells
Code Smells
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passos
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Clean Code
Clean CodeClean Code
Clean Code
 
Community webcast
Community webcastCommunity webcast
Community webcast
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 Refactoring
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Java m01 - Nomenclaturas
Java   m01 - NomenclaturasJava   m01 - Nomenclaturas
Java m01 - Nomenclaturas
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmer
 
Clean Coder
Clean CoderClean Coder
Clean Coder
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 

Recently uploaded

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
 
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
 
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 - 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
 
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 - 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
 

Recently uploaded (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
 
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
 
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 - 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
 
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 - 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
 

Clean code

  • 1. CLEAN CODE escrevendo código limpo
  • 4. SOBRE O QUE FALAREI • nomenclaturas • objetos • funções • estrutura de dados • classes • tratamento de exceções • formatação • boundaries • comentários • unit testing
  • 5. SOBRE O QUE NÃO FALAREI • dependency injection • emergência • TDD • concorrência • refactoring • frameworks de teste
  • 7. O QUE É UM CÓDIGO LIMPO? • direto ao ponto • padrões definidos • mínimas dependências • de fácil leitura/entendimento • sem duplicação • coberto de testes • fácil manutenção • elegante sindrome da janela quebrada
  • 8. “NÃO SOU UM EXCELENTE DESENVOLVEDOR. SOU APENAS UM DESENVOLVEDOR MEDIANO QUE SEGUE À RISCA AS BOAS PRÁTICAS DE UM CÓDIGO LIMPO.” (um dev muito famoso)
  • 10. NOMES SIGNIFICATIVOS Se o nome requer um comentário, é um nome ruim
  • 11. USEM NOMES QUE REVELEM A INTENÇÃO
  • 12. NOMES SIGNIFICATIVOS 1. What kinds of things are in theList? 2. What is the significance of the zeroth subscript of an item in theList? 3. What is the significance of the value 4? 4. How would I use the list being returned?
  • 14. NOMES SIGNIFICATIVOS 1. Parte do nosso cérebro é dedicado ao conceito de palavras. e palavras, por definição, são pronunciaveis; usemos essa parte do cérebro! 2. Programar é uma atividade social. 3. método Dê tê á Érre Cê Dê
  • 16. NOMES SIGNIFICATIVOS 1. Muito mais facil encontrar WORK_DAYS_PER_WEEK DO QUE “5” 2. “SUM” não é de fato um nome muito útil, mas ao menos já é mais buscável do que simplestemente “s” 3. CODE SMELL! MAGIC NUMBER!
  • 18. NOMES SIGNIFICATIVOS CLASSES em geral, classes devem ser representadas por substantivos, não verbos. bons exemplos: Cliente, Perfil, Estoque, etc. MÉTODOS em geral, métodos devem ser representadas por verbos ou frases verbais bons exemplos: enviarPagamento, removerPagina, salvar, etc. (prefira o infinitivo)
  • 22. FUNÇÕES • menos é sempre mais! • extraia trechos em métodos privados • lembre-se dos nomes significativos ;) • vá direto ao ponto
  • 24. FAÇA UMA ÚNICA COISA blocos e endentação, indicios de que está fazendo muita coisa
  • 25. FUNÇÕES • repare a endentação (sim, é assim que escreve ;) • muitos níveis ~= muita responsabilidade •o método deve fazer uma única coisa, e bem! • dá para extrair? está fazendo mais de uma coisa
  • 26. LEIA O CÓDIGO DE CIMA PARA BAIXO Como uma narrativa
  • 27. FUNÇÕES • seu código deve ser lido como uma narrativa • temos sujeitos, verbos e predicados :) • narrativas são frases com uma ordem coerente • lembre-se disso ao extrair em métodos privados
  • 28. FUNÇÕES E SEUS ARGUMENTOS
  • 29. FUNÇÕES • muitos argumentos ~= code smell • existem algumas regras para qtd de argumentos • argumentos booleanos em geral não são bons • ex:
  • 31. EVITE OS SIDE EFFECTS
  • 32. FUNÇÕES Onde está o side effect?
  • 33. EXCEÇÕES SÃO MELHORES QUE CÓDIGOS DE ERRO
  • 35. DRY (DON’T REPEAT YOURSELF)
  • 36. COMENTÁRIOS devem valer os bytes que consomem
  • 37. COMENTÁRIOS NÃO AJUDAM UM CÓDIGO SUJO
  • 38. COMENTÁRIOS “Ooh, I’d better comment that!” No! You’d better clean it! • em geral, servem para explicar um código ruim • um bom código é auto-documentado • extraia para um método que faça o que diz!
  • 40. COMENTÁRIOS // format matched kk:mm:ss EEE, MMM dd, yyyy Pattern timeMatcher = Pattern.compile( "d*:d*:d* w*, w* d*, d*"); • comentários sobre licença • comentários informativos • necessidade de explicação de intenção (negócio)
  • 42. COMENTÁRIOS // format matched kk:mm:ss EEE, MMM dd, yyyy Pattern timeMatcher = Pattern.compile( "d*:d*:d* w*, w* d*, d*"); • por falta do que escrever • redundantes • doc em APIs não-públicas • dizendo algo que o próprio código deveria dizer • código comentado :/
  • 44. FORMATAÇÃO pode ser interpretado como uma coisa pessoal. apesar disso, valem os padroes entre times
  • 45. O QUE VALE É A REGRA DO TIME
  • 46. MAS EXISTEM ALGUNS PADRÕES DE LINGUAGENS
  • 47. PYTHON: PEP8 explicar o pq da PEP 8, é sempre bom saber qual existem padroes para sua importância para o padrão da linguagem. nomes de classe, nomes pessoas que vão ler o python tem um padrão, de modulo, nomes de codigo, etc. Java tem outro, C++ tem metodos, variaveis, outro constantes, etc.
  • 49. LIMITES HORIZONTAIS explicar o pq da linha de limite horizontal.
  • 50. ENDENTAÇÃO, QUEBRA DE LINHAS E TERNÁRIOS
  • 51. E O IDIOMA? leve em consideracao a linguagem de dominio. por exemplo, ficaria estranho traduizer “Folião”
  • 52. OBJETOS E ESTRUTRA DE DADOS
  • 54.
  • 55.
  • 56. OBJETOS E ESTRUTURAS DE DADOS • objetos expõem comportamentos e escondem dados • estruturas de dados expõem seus dados e não têm comportamentos significativos
  • 57. A LEI DE DEMETER
  • 58. OBJETOS E ESTRUTURAS DE DADOS • um método f de uma classe C só conhece: • métodos de C • objetos criados por f • objetos passados como argumentos para f • objetos em variáveis de instância de C
  • 61. EXCEÇÕES AO INVÉS DE CÓDIGO DE ERRO ;)
  • 62. TRATAMENTO DE EXCEÇÃO É UMA DAS COISAS QUE UMA FUNÇÃO/MÉTODO FAZ try except finally deve ser o unico bloco de um metodo
  • 63.
  • 64. NÃO USE EXCEÇÕES GENÉRICAS conheça seu código. saiba que tipos de exceções podem ser disparadas. se nao conhece as exceções default, dê uma lida nelas
  • 65. VOCÊ TAMBÉM PODE CRIAR EXCEÇÕES! se couber fazer uma exceção especifica, crie uma classe de Excecao sua que será usada em outros pontos do projeto
  • 66. NÃO RETORNE NULL - obriga usos de if - pode disparar nullpointer - considere lancar uma exceção ou retornar um objeto especial
  • 67.
  • 68. NÃO PASSE NULL - obriga tratamento de nulo - tira a legibilidade do código algumas linguagens até facilitam
  • 70. BASICAMENTE AS MESMAS DICAS DE FUNÇÕES ;)
  • 72. MUITO OBRIGADO @gustavocsb

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n