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

Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2Inael Rodrigues
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Uml Diagramas Estruturais
Uml   Diagramas EstruturaisUml   Diagramas Estruturais
Uml Diagramas Estruturaisthaisedd
 

La actualidad más candente (20)

JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
UML - Diagrama de Pacotes
UML - Diagrama de PacotesUML - Diagrama de Pacotes
UML - Diagrama de Pacotes
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Introdução à UML com Casos de Uso
Introdução à UML com Casos de UsoIntrodução à UML com Casos de Uso
Introdução à UML com Casos de Uso
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 
Clean Code
Clean CodeClean Code
Clean Code
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Diagramas de pacotes
Diagramas de pacotesDiagramas de pacotes
Diagramas de pacotes
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Análise e Modelagem com UML
Análise e Modelagem com UMLAnálise e Modelagem com UML
Análise e Modelagem com UML
 
Uml Diagramas Estruturais
Uml   Diagramas EstruturaisUml   Diagramas Estruturais
Uml Diagramas Estruturais
 

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
 

Último

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

Último (6)

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

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)