SlideShare una empresa de Scribd logo
1 de 23
Clean Code
Tiago Bencardino (tiagobencardino@gmail.com)
 O que é “clean code” e por que é importante?
 Escolhendo nomes com significado
 Funções
 Comentários
Agenda
 Facilmente entendido pelos outros
 Sem surpresas, direto
 Mínimo, sem dependências
 Feito para o mundo real, bom tratamento de erros
 Coeso
 Feito com cuidado
O que é um código limpo?
Sintomas de código ruim
 Medo de efetuar mudanças
 Confusão por não estar claro
 Frustração pelo tempo perdido
 Raiva por quem fez algo tao depreciável
Problemas
 Dificuldade em corrigir
problemas
 Perda de
desempenho/produtivid
ade do time
 Em casos críticos,
abandono do projeto
 “Honestidade nas pequenas coisas
não é algo pequeno” – Ditado
dinamarquês
 “Deus está nos detalhes” –
Arquiteto van der Rohe
Pequenas coisas importam
 Nomes são importantissimos em software
 Variáveis, funções, argumentos, classes, pacotes,
etc
 Boa parte do tempo estamos escolhendo nomes
durante a programação – devemos escolher BEM
 Todo nome deve transparecer:
 Seu objetivo (por que existe?)
 Qua sua tarefa (O que faz)
 Como é usado
Escolhendo nomes
 Nomes devem sempre revelar a intenção
 Se um nome requer um comentário explicando, então
provavelmente não é um bom nome
Nomes reveladores
 Que nomes representariam melhor?
Exemplo – Flagged cells
Exemplo – Flagged cells
Exemplo – Flagged cells
 Evite usar palavras-chave de outras linguages (ex:
shell do unix)
 Evite usar classes no nome das variaveis, se nao forem
de tal classe (ex: list)
 Evite usar nomes muito parecidos
Evite desinformação
 Evite números em série
Faça distinções reais
 Qual a diferença entre essas funções?
 Se você nao consegue ler uma variável sem soletrar,
provavelmente não é um bom nome (xpto, abc, etc..)
Nomes pronunciáveis
 pegarOBeco(); ou sair(); ?
 exterminate(); ou kill(); ?
 Em geral, nomes como esses só tem signicado
durante um curto periodo de tempo
Evite piadas e gírias
 Classes devem SEMPRE ser substantivo: Car, Person,
LoginView, etc.
 Métodos devem SEMPRE ser verbos
 Uma boa prática é prefixar em ‘get’, ‘set’ e ‘is’ para
metodos de acesso. Essa padrão pode variar
dependendo da linguagem.
 Ao sobrescrever construtores, metódos factory
estáticos com descricao dos argumentos é
interessante.
Classes e métodos/funções
 Tamanho:
 Regra 1: funções devem ser pequenas
 Regra2: devem ser menores ainda
 Blocos if, else, while: devem conter apenas 1 linha,
com a chamada para outro metodo. Evite
aninhamento de blocos
Funções
 Faça apenas uma coisa – tente extrair um pedaço do
método e pensar em outro nome
 Tenha apenas um nível de abstração
 Ideia prática: prefixo TO
Funções Atômicas
 Uma função deve, apenas:
 Fazer algo
 Responder algo
Separação de objetivo
 Evite duplicação de código
 Um código reescrito três vezes representa três
pontos de mudança no futuro
 E três oportunidades de falha
 Lembre-se: programação estruturada,
orientada a aspectos, componentes e objetos
são estratégias para eliminar duplicação
DRY – Don’t repeat yourself
 Prefira lançar exceções a retornar “error code” – se a
linguagem der suporte
Erros
 Existem muitas técnicas para escrever um bom
código
 Aplicar essas técnicas exigem tempo, treino e
paciência, mas o ganho de produtividade no futuro
compensa
 Não tenha medo de refatorar
Conclusão
Clean code - Mantenha seu código limpo

Más contenido relacionado

La actualidad más candente

Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoHelder Lopes
 
Apostila de uml
Apostila de umlApostila de uml
Apostila de umlaudiclerio
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoVinícius de Paula
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2Inael Rodrigues
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesRodrigo Cascarrolho
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonEduardo Nicola F. Zagari
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequenciaItalo Costa
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 

La actualidad más candente (20)

Clean Code
Clean CodeClean Code
Clean Code
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumo
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Apostila de uml
Apostila de umlApostila de uml
Apostila de uml
 
UML - Diagrama de Pacotes
UML - Diagrama de PacotesUML - Diagrama de Pacotes
UML - Diagrama de Pacotes
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Diagrama de Casos de Uso
Diagrama de Casos de UsoDiagrama de Casos de Uso
Diagrama de Casos de Uso
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequencia
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Definição e classificação dos requisitos
Definição e classificação dos requisitosDefinição e classificação dos requisitos
Definição e classificação dos requisitos
 
Aula 06 - Diagrama de classes
Aula 06 - Diagrama de classesAula 06 - Diagrama de classes
Aula 06 - Diagrama de classes
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 

Destacado

Naming Standards, Clean Code
Naming Standards, Clean CodeNaming Standards, Clean Code
Naming Standards, Clean CodeCleanestCode
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summaryJan de Vries
 
E tutorial - digital signature
E tutorial - digital signatureE tutorial - digital signature
E tutorial - digital signaturePSPCL
 
Digital Signature
Digital SignatureDigital Signature
Digital Signaturesaurav5884
 

Destacado (8)

Clean code
Clean codeClean code
Clean code
 
Naming Standards, Clean Code
Naming Standards, Clean CodeNaming Standards, Clean Code
Naming Standards, Clean Code
 
Clean Code
Clean CodeClean Code
Clean Code
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summary
 
Clean code
Clean codeClean code
Clean code
 
E tutorial - digital signature
E tutorial - digital signatureE tutorial - digital signature
E tutorial - digital signature
 
Digital Signature
Digital SignatureDigital Signature
Digital Signature
 

Similar a Clean code - Mantenha seu código limpo

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Pedro Edson Silva Barros
 
Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...
Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...
Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...Edlaine Zamora
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Iure Guimaraes
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedoresguitoper
 
Dicas para maratonas de programação
Dicas para maratonas de programaçãoDicas para maratonas de programação
Dicas para maratonas de programaçãoAnderson Araújo
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Refatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus CheirosRefatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus CheirosPedro Hos
 
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
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 RefactoringWildtech
 

Similar a Clean code - Mantenha seu código limpo (20)

Clean Code
Clean CodeClean Code
Clean Code
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
 
Cs 2
Cs 2Cs 2
Cs 2
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
Clean code
Clean codeClean code
Clean code
 
Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...
Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...
Compilar Não Basta: Escreva código para pessoas e não apenas para máquinas - ...
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedores
 
Dicas para maratonas de programação
Dicas para maratonas de programaçãoDicas para maratonas de programação
Dicas para maratonas de programação
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Refatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus CheirosRefatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus Cheiros
 
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?
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 Refactoring
 

Clean code - Mantenha seu código limpo

  • 1. Clean Code Tiago Bencardino (tiagobencardino@gmail.com)
  • 2.  O que é “clean code” e por que é importante?  Escolhendo nomes com significado  Funções  Comentários Agenda
  • 3.  Facilmente entendido pelos outros  Sem surpresas, direto  Mínimo, sem dependências  Feito para o mundo real, bom tratamento de erros  Coeso  Feito com cuidado O que é um código limpo?
  • 4. Sintomas de código ruim  Medo de efetuar mudanças  Confusão por não estar claro  Frustração pelo tempo perdido  Raiva por quem fez algo tao depreciável
  • 5. Problemas  Dificuldade em corrigir problemas  Perda de desempenho/produtivid ade do time  Em casos críticos, abandono do projeto
  • 6.  “Honestidade nas pequenas coisas não é algo pequeno” – Ditado dinamarquês  “Deus está nos detalhes” – Arquiteto van der Rohe Pequenas coisas importam
  • 7.  Nomes são importantissimos em software  Variáveis, funções, argumentos, classes, pacotes, etc  Boa parte do tempo estamos escolhendo nomes durante a programação – devemos escolher BEM  Todo nome deve transparecer:  Seu objetivo (por que existe?)  Qua sua tarefa (O que faz)  Como é usado Escolhendo nomes
  • 8.  Nomes devem sempre revelar a intenção  Se um nome requer um comentário explicando, então provavelmente não é um bom nome Nomes reveladores  Que nomes representariam melhor?
  • 12.  Evite usar palavras-chave de outras linguages (ex: shell do unix)  Evite usar classes no nome das variaveis, se nao forem de tal classe (ex: list)  Evite usar nomes muito parecidos Evite desinformação
  • 13.  Evite números em série Faça distinções reais  Qual a diferença entre essas funções?
  • 14.  Se você nao consegue ler uma variável sem soletrar, provavelmente não é um bom nome (xpto, abc, etc..) Nomes pronunciáveis
  • 15.  pegarOBeco(); ou sair(); ?  exterminate(); ou kill(); ?  Em geral, nomes como esses só tem signicado durante um curto periodo de tempo Evite piadas e gírias
  • 16.  Classes devem SEMPRE ser substantivo: Car, Person, LoginView, etc.  Métodos devem SEMPRE ser verbos  Uma boa prática é prefixar em ‘get’, ‘set’ e ‘is’ para metodos de acesso. Essa padrão pode variar dependendo da linguagem.  Ao sobrescrever construtores, metódos factory estáticos com descricao dos argumentos é interessante. Classes e métodos/funções
  • 17.  Tamanho:  Regra 1: funções devem ser pequenas  Regra2: devem ser menores ainda  Blocos if, else, while: devem conter apenas 1 linha, com a chamada para outro metodo. Evite aninhamento de blocos Funções
  • 18.  Faça apenas uma coisa – tente extrair um pedaço do método e pensar em outro nome  Tenha apenas um nível de abstração  Ideia prática: prefixo TO Funções Atômicas
  • 19.  Uma função deve, apenas:  Fazer algo  Responder algo Separação de objetivo
  • 20.  Evite duplicação de código  Um código reescrito três vezes representa três pontos de mudança no futuro  E três oportunidades de falha  Lembre-se: programação estruturada, orientada a aspectos, componentes e objetos são estratégias para eliminar duplicação DRY – Don’t repeat yourself
  • 21.  Prefira lançar exceções a retornar “error code” – se a linguagem der suporte Erros
  • 22.  Existem muitas técnicas para escrever um bom código  Aplicar essas técnicas exigem tempo, treino e paciência, mas o ganho de produtividade no futuro compensa  Não tenha medo de refatorar Conclusão

Notas del editor

  1. Claro, com boas abstracoes, sem surpresas, bons nomes Sem features escondidas
  2. Int tempoGastoEmDias; Int diasDesdeCriacao; Int diasDesdeModificacao;
  3. accountGroup, accounts…
  4. Source e destination
  5. New Complex (23.0); , Complex.FromRealNumber(23.0)