SlideShare una empresa de Scribd logo
1 de 22
Francisco Clauvane
 Esta apresentacao teve como base o livro Clean Code, a
 minha experiencia profissional e as dicas dadas por
 profissionais mais experientes. Onde o objetivo da
 mesma e mostrar na teoria e na pratica o que e um
 codigo limpo.
 1-Codigo limpo
 2-Nomes significativos
 3-Funcoes
 4-Comentarios
 5-Formatacao
 6-Objetos e Estrutura de dados
 Codigo esta ultrapassado?
   Modelos e requisitos
   Codigo gerado e nao mais escrito
 Codigo ruim
   Prazos curtos
   Lei de LeBlanc: Mais tarde e igual a nunca.
 O custo de ter um codigo confuso
     Mudanca alguma e trivial
     Produtividade baixa;Adesao de novos membros
     O grande replanejamento
     Atitude: Assumindo a culpa
     Gerentes: paixao ao prazos e requisitos;Programdores: paixao
      ao codigo
 A arte do codigo limpo
   Analogia com a pintura de um quadro
   Disciplina para aplicar pequenas tecnicas
   Sensibilidade ao codigo
 O que e um codigo limpo?
   Multiplas definicoes
      Sensibilidade ao codigo
   Grady Booch
   Escolas de pensamento
      Analogia ao estilo de uma arte marcial
   A regra de escoteiro
 Nomeacoes constantes
 Use nomes que revelem seu proposito
   int d;//Tempo decorrido em dias
   int tempoDecorridoEmDias;
 Evite informacoes errradas
   int hp;//hipotenusa
   int[] accountList;
 Faca distincoes significativas
     int a1,a2,a3;
     getActiveAccount();
     getActiveAccounts();
     getActiveAccountInfo();
 Use nomes pronunciaveis
   private Date genymdhms;
 Use nomes passiveis de busca
   Nomes de uma letra so ou numeros possuem um
    problema em particular: nao sao faceis de encontrar ao
    longo de um texto;
   O tamanho de uma variavel deve ser proporcional ao
    tamanho de seu escopo;
 Evite o mapeamento mental
   Contador de interacoes ser chamado de ‘b’
 Nome de classes
   Geralmente sao substantivos
      Ex: Conta

 Nome de metodos
   Geralmente sao nome de verbos
      Ex: salvar
   Acesso,alteracao e autenticacao
      ‘get’, ‘set’ e ‘is’

 Nao de uma de espertinho
   Use nomes serios e nao obtidos a partir de brincadeiras
    que apenas um grupo limitado de pessoas saibam
 Uma palavra por conceito
   Fetch,retrieve e get
   Evite trocadilhos
 Use nomes a partir do dominio da solucao
   accountVisitor
   jobQueue
   Na ausencia de nomes a partir da solucao use nomes a partir
    do problema.
 Adicione um contexto signigicativo
   firstName/addrFirstName
   Nao use contextos desnecessarios
       PORTALAddrFirstName/addrFirstName
 Devem ser pequenas
   Devem ser espertas
 Blocos e indentacoes
   If,else e while devem possuir apenas uma linha
   Estruras aninhadas devem possuir no maximo um ou
    dois niveis de indentacao
 Faca apenas uma coisa
   Coesao: Principio da responsabilidade unica
   Um nivel de abstracao por funcao
   Regra decrescente
 Use nomes descritivos
   Melhor um nome extenso do que um pequeno e
    enigmatico
 Parametros de funcoes
   Requerem muito conceito
   Ideal: sem parametros
   Monades,diades,triades e poliades
 Parametros logicos
   “Feios”: Ferem o principio da responsabilidade unica
   Alternativa: Devem ser feitas duas funcoes, uma para
    cada valor logico
 Objetos como parametros
   Circle makeCircle (double x, double y, double radius);
   Circle makeCircle (Point center, double radius);
 Separacao comando consulta
   As funcoes devem fazer ou responder algo, mas nao ambos
      if(set(“username”, “clauvane”));
      if (setAndCheckIfExists(“username”, “clauvane”)) ;
 Prefira excecoes a retorno de codigo de errro
 Extraia os blocos try/catch
   Nao suba as excecoes para as camadas superiores, ao inves
    disto extraia os blocos try/catch dentro da propria funcao
 Tratamento de erro e uma coisa so
   Nao deve existir codigo depois que o bloco try/catch termina
 Evite repeticoes
   Duas ou mais funcoes que se utilizam de um mesmo
    trecho de codigo
 Programacao estrutura
   Regra de Edsger Dijkstra: Cada funcao e bloco dentro de
    uma funcao deve ter uma entrada e uma saida.
      Somente um return, nenhum break, continue e jamais um
       GOTO
 Como escrever funcoes como essa?
   Segundo Robert C. Martin: “Nao aplico desde o
    comeco.Acho que isso nao seja possivel”
 Comentarios compensam um codigo ruim
   Motivacao para fazer a bagunca
   Explique-se no codigo
 Comentarios bons
   De maneira geral, comentario bom e aquele que nao precisa
      ser escrito
     Gerados automaticamente
     Informativos
     Explicacao da intencao
     Alerta sobre consequencias
     //TODO
     Destaque
     Javadocs
 Comentario ruins
   Redundantes
   Enganadores
   Imperativos
      Toda funcao deve ter um javadoc.
   Longos
   Ruidosos (Obvios)
 Evite o comentario se e possivel usar uma funcao ou
  variavel
 Marcadores de posicao
   Se usados esporadicamente e em situacoes que seja justificado
    sua existencia (sensibilidade ao codigo) nao ha problemas
 Comentarios ao lado de chaves de fechamento
   Usado em funcoes grandes
   Ao inves de usar um comentario para suprir a necessidade de
    compreensao da funcao, voce deve diminuir esta funcao
 Credito e autoria
   Desnecessarios
   Versionamento de codigo
 Codigo como comentario
   Medo
   Versionamento de codigo
 Comentario HTML
   Tarefa da ferramenta e nao do programador
 Informacoes nao-locais
   Comentario devem estar proximos ao codigo que e descrito
 Informacoes excessivas
 Conexoes com o codigo
   O comentario deve esta conectado ao codigo o suficiente para
    que o proximo leitor seja capaz de entende-lo
 Cabecalhos de funcoes
   Melhor usar um bom nome do que um comentario de
    cabecalho
 Javadoc em codigos nao-publicos
   Diferentemente dos codigo publicos os javadoc dos nao-
    publicos sao horriveis
 Objetivo da formatacao
    Comunicao de qualidade entre os programadores
 Vertical
    Tamanho da classe em linhas
    Metafora do jornal
       Nivel de abstracao vai do topo para baixo
 Espacamento vertical entre os conceitos
    Uma linha em branco
 Distancia vertical
    Os conceitos intimamentes ligados devem ficar juntos
     verticalmente
       Declaracao de variaveis,variaveis de instancia,funcoes dependentes
       Afinidade conceitual
    Ordenacao vertical
       A funcao chamada deve ficar abaixo da que a chama
 Horizontal
   Tamanho da linha
   Espacamento e continuidade horizontal
      Um espaco em branco

 Alinhamento Horizontal
   Nao e pratico
 Indentacao
   No maximo uma ou duas
 Abstracao de dados
    Concreto
       Estrutura de dados
    Abstrato
       Objeto
 A lei de Demeter
    Um modulo nao deve enxergar o interior de um objeto que ele
     manipula.
 Train wrecks (Acidentes ferroviarios)
    String coisa = getCoisa().getAlgumaCoisa().getOutraCoisa();
    Violacao a lei de Demeter
 Hibridos
    Metade Objeto metade estrutura de dados
 Objetos de transferencia de dados (DTOs)
    beans
 Active record
   DTOs com metodos de navegacao
   Sao estrutura de dados
   Muitos o tratam como objeto e acabam o tornando num
    hibrido
 Sites e livros recomendados
   http://www.guj.com.br
   http://www.CasaDoCodigo.com.br
   http://www.caelum.com.br/online
   https://github.com/clauvane
   https://github.com/rponte
   O livro Clean Code de Robert C. Martin

Más contenido relacionado

La actualidad más candente

Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
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
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHPFernando Chucre
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareFelipe
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Práticas de Programação em .NET
Práticas de Programação em .NETPráticas de Programação em .NET
Práticas de Programação em .NETComunidade NetPonto
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...Manuel Menezes de Sequeira
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 
Aula Algoritmo e Programação - cap2
Aula Algoritmo e Programação - cap2Aula Algoritmo e Programação - cap2
Aula Algoritmo e Programação - cap2Cloves da Rocha
 

La actualidad más candente (20)

Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
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
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHP
 
Rumo à Certificação PHP
Rumo à Certificação PHPRumo à Certificação PHP
Rumo à Certificação PHP
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Clean Code
Clean CodeClean Code
Clean Code
 
Filtro de SPAM
Filtro de SPAMFiltro de SPAM
Filtro de SPAM
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Práticas de Programação em .NET
Práticas de Programação em .NETPráticas de Programação em .NET
Práticas de Programação em .NET
 
Aula 04
Aula 04Aula 04
Aula 04
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Clean code
Clean codeClean code
Clean code
 
Aula 06
Aula 06Aula 06
Aula 06
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Aula Algoritmo e Programação - cap2
Aula Algoritmo e Programação - cap2Aula Algoritmo e Programação - cap2
Aula Algoritmo e Programação - cap2
 

Destacado

Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Arquitetura Orientada a Servicos (SOA)
Arquitetura Orientada a Servicos (SOA)Arquitetura Orientada a Servicos (SOA)
Arquitetura Orientada a Servicos (SOA)Marcelo Sávio
 
Como Publicar Anuncios Na TelexFREE
Como Publicar Anuncios Na TelexFREEComo Publicar Anuncios Na TelexFREE
Como Publicar Anuncios Na TelexFREETelexfree Suporte
 
Corporate finance teminologies
Corporate finance teminologiesCorporate finance teminologies
Corporate finance teminologiesZafar aziz
 
R2cities Progetto Europeo Social Housing
R2cities Progetto Europeo Social HousingR2cities Progetto Europeo Social Housing
R2cities Progetto Europeo Social HousingOfficinae Verdi
 
Création une plate bande d’inspiration « (1)
Création une plate bande d’inspiration « (1)Création une plate bande d’inspiration « (1)
Création une plate bande d’inspiration « (1)Habilux Anne
 
Correcciondelapruebadeecompu
CorrecciondelapruebadeecompuCorrecciondelapruebadeecompu
Correcciondelapruebadeecompupabonmonica
 
бало
балобало
балоkachmad
 
про беньковського (автосохраненный)
про беньковського (автосохраненный)про беньковського (автосохраненный)
про беньковського (автосохраненный)Muzpck
 
20140625_品川女子学院_講義3
20140625_品川女子学院_講義320140625_品川女子学院_講義3
20140625_品川女子学院_講義3Tomoshige Nakamura
 
Como se cadastrar na TelexFREE?
Como se cadastrar na TelexFREE?Como se cadastrar na TelexFREE?
Como se cadastrar na TelexFREE?Telexfree Suporte
 

Destacado (20)

Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Arquitetura Orientada a Servicos (SOA)
Arquitetura Orientada a Servicos (SOA)Arquitetura Orientada a Servicos (SOA)
Arquitetura Orientada a Servicos (SOA)
 
Como Publicar Anuncios Na TelexFREE
Como Publicar Anuncios Na TelexFREEComo Publicar Anuncios Na TelexFREE
Como Publicar Anuncios Na TelexFREE
 
Corporate finance teminologies
Corporate finance teminologiesCorporate finance teminologies
Corporate finance teminologies
 
Amarcord
AmarcordAmarcord
Amarcord
 
Music video structure
Music video structureMusic video structure
Music video structure
 
Riesgos del internt
Riesgos del interntRiesgos del internt
Riesgos del internt
 
R2cities Progetto Europeo Social Housing
R2cities Progetto Europeo Social HousingR2cities Progetto Europeo Social Housing
R2cities Progetto Europeo Social Housing
 
Création une plate bande d’inspiration « (1)
Création une plate bande d’inspiration « (1)Création une plate bande d’inspiration « (1)
Création une plate bande d’inspiration « (1)
 
Correcciondelapruebadeecompu
CorrecciondelapruebadeecompuCorrecciondelapruebadeecompu
Correcciondelapruebadeecompu
 
Italiy mif
Italiy mifItaliy mif
Italiy mif
 
Unit 3 task 3 table 2
Unit 3 task 3 table 2Unit 3 task 3 table 2
Unit 3 task 3 table 2
 
бало
балобало
бало
 
Make in Progress | Cross Creativity 19/06
Make in Progress | Cross Creativity 19/06Make in Progress | Cross Creativity 19/06
Make in Progress | Cross Creativity 19/06
 
Romania mif
Romania mifRomania mif
Romania mif
 
Poland mif
Poland mifPoland mif
Poland mif
 
про беньковського (автосохраненный)
про беньковського (автосохраненный)про беньковського (автосохраненный)
про беньковського (автосохраненный)
 
Justin p
Justin pJustin p
Justin p
 
20140625_品川女子学院_講義3
20140625_品川女子学院_講義320140625_品川女子学院_講義3
20140625_品川女子学院_講義3
 
Como se cadastrar na TelexFREE?
Como se cadastrar na TelexFREE?Como se cadastrar na TelexFREE?
Como se cadastrar na TelexFREE?
 

Similar a Código limpo

Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
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
 
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
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 RefactoringWildtech
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehaveMarcelo Zeferino
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersStefan Teixeira
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaElaine Naomi
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NETFabiano Roman Beraldi
 

Similar a Código limpo (20)

Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
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
 
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
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 Refactoring
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehave
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Gisele
GiseleGisele
Gisele
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Code Smells
Code SmellsCode Smells
Code Smells
 

Código limpo

  • 2.  Esta apresentacao teve como base o livro Clean Code, a minha experiencia profissional e as dicas dadas por profissionais mais experientes. Onde o objetivo da mesma e mostrar na teoria e na pratica o que e um codigo limpo.
  • 3.  1-Codigo limpo  2-Nomes significativos  3-Funcoes  4-Comentarios  5-Formatacao  6-Objetos e Estrutura de dados
  • 4.  Codigo esta ultrapassado?  Modelos e requisitos  Codigo gerado e nao mais escrito  Codigo ruim  Prazos curtos  Lei de LeBlanc: Mais tarde e igual a nunca.  O custo de ter um codigo confuso  Mudanca alguma e trivial  Produtividade baixa;Adesao de novos membros  O grande replanejamento  Atitude: Assumindo a culpa  Gerentes: paixao ao prazos e requisitos;Programdores: paixao ao codigo
  • 5.  A arte do codigo limpo  Analogia com a pintura de um quadro  Disciplina para aplicar pequenas tecnicas  Sensibilidade ao codigo  O que e um codigo limpo?  Multiplas definicoes  Sensibilidade ao codigo  Grady Booch  Escolas de pensamento  Analogia ao estilo de uma arte marcial  A regra de escoteiro
  • 6.  Nomeacoes constantes  Use nomes que revelem seu proposito  int d;//Tempo decorrido em dias  int tempoDecorridoEmDias;  Evite informacoes errradas  int hp;//hipotenusa  int[] accountList;  Faca distincoes significativas  int a1,a2,a3;  getActiveAccount();  getActiveAccounts();  getActiveAccountInfo();
  • 7.  Use nomes pronunciaveis  private Date genymdhms;  Use nomes passiveis de busca  Nomes de uma letra so ou numeros possuem um problema em particular: nao sao faceis de encontrar ao longo de um texto;  O tamanho de uma variavel deve ser proporcional ao tamanho de seu escopo;  Evite o mapeamento mental  Contador de interacoes ser chamado de ‘b’
  • 8.  Nome de classes  Geralmente sao substantivos  Ex: Conta  Nome de metodos  Geralmente sao nome de verbos  Ex: salvar  Acesso,alteracao e autenticacao  ‘get’, ‘set’ e ‘is’  Nao de uma de espertinho  Use nomes serios e nao obtidos a partir de brincadeiras que apenas um grupo limitado de pessoas saibam
  • 9.  Uma palavra por conceito  Fetch,retrieve e get  Evite trocadilhos  Use nomes a partir do dominio da solucao  accountVisitor  jobQueue  Na ausencia de nomes a partir da solucao use nomes a partir do problema.  Adicione um contexto signigicativo  firstName/addrFirstName  Nao use contextos desnecessarios  PORTALAddrFirstName/addrFirstName
  • 10.  Devem ser pequenas  Devem ser espertas  Blocos e indentacoes  If,else e while devem possuir apenas uma linha  Estruras aninhadas devem possuir no maximo um ou dois niveis de indentacao  Faca apenas uma coisa  Coesao: Principio da responsabilidade unica  Um nivel de abstracao por funcao  Regra decrescente
  • 11.  Use nomes descritivos  Melhor um nome extenso do que um pequeno e enigmatico  Parametros de funcoes  Requerem muito conceito  Ideal: sem parametros  Monades,diades,triades e poliades  Parametros logicos  “Feios”: Ferem o principio da responsabilidade unica  Alternativa: Devem ser feitas duas funcoes, uma para cada valor logico
  • 12.  Objetos como parametros  Circle makeCircle (double x, double y, double radius);  Circle makeCircle (Point center, double radius);  Separacao comando consulta  As funcoes devem fazer ou responder algo, mas nao ambos  if(set(“username”, “clauvane”));  if (setAndCheckIfExists(“username”, “clauvane”)) ;  Prefira excecoes a retorno de codigo de errro  Extraia os blocos try/catch  Nao suba as excecoes para as camadas superiores, ao inves disto extraia os blocos try/catch dentro da propria funcao  Tratamento de erro e uma coisa so  Nao deve existir codigo depois que o bloco try/catch termina
  • 13.  Evite repeticoes  Duas ou mais funcoes que se utilizam de um mesmo trecho de codigo  Programacao estrutura  Regra de Edsger Dijkstra: Cada funcao e bloco dentro de uma funcao deve ter uma entrada e uma saida.  Somente um return, nenhum break, continue e jamais um GOTO  Como escrever funcoes como essa?  Segundo Robert C. Martin: “Nao aplico desde o comeco.Acho que isso nao seja possivel”
  • 14.  Comentarios compensam um codigo ruim  Motivacao para fazer a bagunca  Explique-se no codigo  Comentarios bons  De maneira geral, comentario bom e aquele que nao precisa ser escrito  Gerados automaticamente  Informativos  Explicacao da intencao  Alerta sobre consequencias  //TODO  Destaque  Javadocs
  • 15.  Comentario ruins  Redundantes  Enganadores  Imperativos  Toda funcao deve ter um javadoc.  Longos  Ruidosos (Obvios)  Evite o comentario se e possivel usar uma funcao ou variavel  Marcadores de posicao  Se usados esporadicamente e em situacoes que seja justificado sua existencia (sensibilidade ao codigo) nao ha problemas
  • 16.  Comentarios ao lado de chaves de fechamento  Usado em funcoes grandes  Ao inves de usar um comentario para suprir a necessidade de compreensao da funcao, voce deve diminuir esta funcao  Credito e autoria  Desnecessarios  Versionamento de codigo  Codigo como comentario  Medo  Versionamento de codigo  Comentario HTML  Tarefa da ferramenta e nao do programador
  • 17.  Informacoes nao-locais  Comentario devem estar proximos ao codigo que e descrito  Informacoes excessivas  Conexoes com o codigo  O comentario deve esta conectado ao codigo o suficiente para que o proximo leitor seja capaz de entende-lo  Cabecalhos de funcoes  Melhor usar um bom nome do que um comentario de cabecalho  Javadoc em codigos nao-publicos  Diferentemente dos codigo publicos os javadoc dos nao- publicos sao horriveis
  • 18.  Objetivo da formatacao  Comunicao de qualidade entre os programadores  Vertical  Tamanho da classe em linhas  Metafora do jornal  Nivel de abstracao vai do topo para baixo  Espacamento vertical entre os conceitos  Uma linha em branco  Distancia vertical  Os conceitos intimamentes ligados devem ficar juntos verticalmente  Declaracao de variaveis,variaveis de instancia,funcoes dependentes  Afinidade conceitual  Ordenacao vertical  A funcao chamada deve ficar abaixo da que a chama
  • 19.  Horizontal  Tamanho da linha  Espacamento e continuidade horizontal  Um espaco em branco  Alinhamento Horizontal  Nao e pratico  Indentacao  No maximo uma ou duas
  • 20.  Abstracao de dados  Concreto  Estrutura de dados  Abstrato  Objeto  A lei de Demeter  Um modulo nao deve enxergar o interior de um objeto que ele manipula.  Train wrecks (Acidentes ferroviarios)  String coisa = getCoisa().getAlgumaCoisa().getOutraCoisa();  Violacao a lei de Demeter  Hibridos  Metade Objeto metade estrutura de dados  Objetos de transferencia de dados (DTOs)  beans
  • 21.  Active record  DTOs com metodos de navegacao  Sao estrutura de dados  Muitos o tratam como objeto e acabam o tornando num hibrido
  • 22.  Sites e livros recomendados  http://www.guj.com.br  http://www.CasaDoCodigo.com.br  http://www.caelum.com.br/online  https://github.com/clauvane  https://github.com/rponte  O livro Clean Code de Robert C. Martin