SlideShare a Scribd company logo
1 of 71
Boas Práticas
Clean Code
Técnica para um código limpo
Rodrigo Kono
MVP, MCTS, MCPD, MCT, MCP
@rodrigokono
www.rodrigokono.net
Há duas razões pelas quais
você está nesta palestra:
1. Você é um programador
2. Deseja se tornar um ainda melhor.
ÓTIMO! PRECISAMOS DE
PROGRAMADORES MELHORES
Robert C. Martin
The Clean Coder
Robert C. Martin (Uncle Bob); Programador desde 1970;
Fundador e Presidente Object Mentor Inc.
Livros:
Designing Object-Oriented C++ Applications using the Booch Method. 1995.
Agile Software Development: Principles, Patterns and Practices. 2002.
Clean Code: A Handbook of Agile Software Craftsmanship.
O que é Clean Code?
• Eficiente
• Simples
• Direto ao ponto
• Mínimas dependências
• Sem duplicação
• Fácil manutenção
• Padrões definidos
• Fácil leitura e
entendimento
• Coberto de testes
• Elegante
Síndrome da janela quebrada
Que porta representa o seu código?
"Qualquer um consegue escrever
código que um computador entende.
Bons programadores escrevem
código que humanos endentem“
Martin Fowler
Funcionar é o mínimo que se espera
Ah! Mas o cronograma é
apertado.
Não tenho tempo para
frescura!
Meu chefe está me
pressionando!
Quero mostrar produtividade.
Filho feio não tem pai!
Afinal, de quem é a culpa?
É nossa!
Como mensurar a
qualidade de um código?
OK! Vamos ao que interessa
NOMES SIGNIFICATIVOS
Nomes significativos
int d; // tempo transcorrido em dias
int tempoTranscorridoEmDias;
int diasDesdeCriacaoDoArquivo;
int diasDesdeModificacaoDoArquivo;
int idadeDoArquivoEmDias;
Use nomes que revelem a intenção
Nomes significativos
public List<int> obter()
{
int[] x = new int[3];
List<int> lista1 = new List<int>();
for (int i = 0; i < lista; i++)
{
if (x[0] == 4)
{
lista1.Add(x[0]);
}
}
return lista1;
}
public List<int> obtemDiasMarcados()
{
int[] diaMarcado = new int[3];
List<int> diasMarcados = new List<int>();
for (int dia = 0; dia < mes; dia++)
{
if (diaMarcado[STATUS] == MARCADO)
{
diasMarcados.Add(diaMarcado[STATUS]);
}
}
return diasMarcados;
}
Nomes significativos
public List<int> obtemDiasMarcados()
{
int[] diaMarcado = new int[3];
List<Dia> diasMarcados = new List<Dia>();
foreach (Dia dia in mes)
{
if (dia.marcado)
{
diasMarcados.Add(dia);
}
}
return diasMarcados;
}
Use nomes pronunciáveis
Nomes significativos
class DtaRcrd102
{
private DateTime gerdmahms;
private DateTime moddmahms;
private string pszqint = "102";
}
class Cliente
{
private DateTime gerarDataHora;
private DateTime modificarDataHora;
private string idRegistro = "102";
}
Use nomes buscáveis
Nomes significativos
const int DIAS_DE_TRABALHO_POR_SEMANA = 5;
int soma = 0;
int diasReaisDeTrabalho = 4;
for (int j = 0; j < NUMERO_DE_TAREFAS; j++)
{
int tarefasPorDia = trabalhoEstimado[j] * diasReaisDetrabalho;
int taredasPorSemana = (dias / DIAS_DE_TRABALHO_POR_SEMANA);
soma += taredasPorSemana;
}
for (int j = 0; j < 30; j++)
{
s = (t[j]*4)/5;
}
Nomeando classes e métodos
Nomes significativos
Classes
representadas por substantivos
ex: Cliente, Perfil, Estoque, etc
Métodos
representadas por verbos ou frases verbais
ex: enviarPagamento, salvar, etc.
FUNÇÕES
Seja pequeno
Funções
• Menos é mais!
• Extraia trechos em métodos privados.
• Lembre-se dos nomes significativos
• Vá direto ao ponto.
Funções
Faça uma coisa só!
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!
• Está fazendo mais de uma coisa? Extraia.
Leia o código de cima pra baixo
Funções
• Seu código deve ser lido como uma
narrativa
• Temos sujeitos, verbos e predicados
• Narrativas são frases em ordem
coerente
• Lembre-se disto ao extrair em
métodos privados;
Funções
• Muitos argumentos = code smell
• Existem algumas regras para a
quantidade de argumentos
• Argumentos booleanos, em geral, não
são bons.
Funções
DRY (Don’t Repeat Yourself)
COMENTÁRIOS
Comentários não ajudam
um código sujo!
Comentários
• 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
• Comentários sobre licença (direitos de
uso de uma lib, por exemplo)
• Comentários informativos
• Necessidade de explicação de negócio
Comentários ruins
Comentários
• Por falta do que escrever
• Redundantes
• Documentação em APIs não públicas
• Dizendo algo que o próprio código
deveria dizer
• Código comentado =S
Comentários
FORMATAÇÃO
O que vale é a regra do time
OBJETOS E ESTRUTURA
DE DADOS
Abstração de dados
Objetos e estrutura de dados
Objetos e estrutura de dados
A lei de Demeter
Objetos e estrutura de dados
Um método M de uma classe C só conhece:
• Métodos de C
• Objetos criados por M
• Objetos passados como argumentos para M
• Objetos em variáveis de instâncias de C
Demeter Law
C
M
TRATAMENTO DE ERRO
Exceções ao invés de
código de erro.
Tratamento de erro
Tratamento de erro
Tratamento de exceção é uma das
coisas que um método ou função faz
Não use exceções genéricas
Não retorne null
Tratamento de erro
• Obriga o uso de if
• Pode disparar NullPointerException
• Considere: Lançar exceção ou retornar um objeto especial
Não passe null
REGRA DOS ESCOTEIROS
Deixe a área do acampamento
mais limpa do que como você a
Encontrou.
Não deixe acumular problemas!
Código ruim
cheira mal...
Torna o seu trabalho
lento e desgastante
com o passar do
tempo
Pode arruinar seu
projeto, carreira,
empresa...
Fique atento.
Falar é fácil!
O desafio é criar um código de
qualidade.
Portanto, falar é o primeiro passo de melhoria.
Using References;
Gustavo Barbosa
http://www.slideshare.net/gustavocsb
Hendrik Ebel
http://www.slideshare.net/hebel
Thiago Faria de Andrade
http://www.slideshare.net/thiagofa
END
contato@rodrigokono.net

More Related Content

What's hot

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
Josino Rodrigues
 
Ponteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaPonteiros e Alocação Dinâmica
Ponteiros e Alocação Dinâmica
Eduardo Oliveira
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
Alvaro Oliveira
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 

What's hot (20)

Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Clean code
Clean codeClean code
Clean code
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Clean code
Clean codeClean code
Clean code
 
Ponteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaPonteiros e Alocação Dinâmica
Ponteiros e Alocação Dinâmica
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
 
Clean code slide
Clean code slideClean code slide
Clean code slide
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpo
 
Clean code
Clean code Clean code
Clean code
 
Clean code
Clean codeClean code
Clean code
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicional
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
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
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 

Similar to Boas práticas técnica para um código limpo (Clean Code)

Similar to Boas práticas técnica para um código limpo (Clean Code) (20)

Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Clean Code
Clean CodeClean Code
Clean Code
 
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
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Clean code
Clean codeClean code
Clean code
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
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.
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 

More from Rodrigo Kono

More from Rodrigo Kono (20)

Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.xDicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
 
Develop using Office Graph API
Develop using Office Graph APIDevelop using Office Graph API
Develop using Office Graph API
 
.NET no Browser - Webassembly com Blazor!
.NET no Browser - Webassembly com Blazor!.NET no Browser - Webassembly com Blazor!
.NET no Browser - Webassembly com Blazor!
 
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
.NET para construir qualquer coisa! (Visão Geral) #dotnetconf
 
ASP.NET Core 2.1 #dotnetconf
ASP.NET Core 2.1 #dotnetconfASP.NET Core 2.1 #dotnetconf
ASP.NET Core 2.1 #dotnetconf
 
Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTS
 
Ciclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a pontaCiclo de vida do desenvolvimento de software de ponta a ponta
Ciclo de vida do desenvolvimento de software de ponta a ponta
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
Controle do ciclo de vida do desenvolvimento de software com tfs vsts
Controle do ciclo de vida do desenvolvimento de software com tfs  vstsControle do ciclo de vida do desenvolvimento de software com tfs  vsts
Controle do ciclo de vida do desenvolvimento de software com tfs vsts
 
Desenvolvimento add in Office 2016
Desenvolvimento add in Office 2016Desenvolvimento add in Office 2016
Desenvolvimento add in Office 2016
 
Além do código dicas de evolução profissional
Além do código   dicas de evolução profissionalAlém do código   dicas de evolução profissional
Além do código dicas de evolução profissional
 
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALMAprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
Aprenda a controlar sua aplicação ASP.NET Core com técnicas de DevOps e ALM
 
O que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET COREO que você precisa saber sobre ASP.NET CORE
O que você precisa saber sobre ASP.NET CORE
 
Deployment no Azure
Deployment no AzureDeployment no Azure
Deployment no Azure
 
Servidor de Build e Integração Contínua
Servidor de Build e Integração ContínuaServidor de Build e Integração Contínua
Servidor de Build e Integração Contínua
 
Dia 01 - Workshop ASP.NET CORE 1.1
Dia 01 - Workshop ASP.NET CORE 1.1Dia 01 - Workshop ASP.NET CORE 1.1
Dia 01 - Workshop ASP.NET CORE 1.1
 
Abertura - Workshop ASP.NET Core
Abertura - Workshop ASP.NET CoreAbertura - Workshop ASP.NET Core
Abertura - Workshop ASP.NET Core
 
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open SourceDesenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
Desenvolvimento .NET no Linux. Veja porque a Microsoft ama Linux e Open Source
 
TypeScript: turbinando os poderes do desenvolvedor javascript
TypeScript: turbinando os poderes do desenvolvedor javascriptTypeScript: turbinando os poderes do desenvolvedor javascript
TypeScript: turbinando os poderes do desenvolvedor javascript
 

Recently uploaded

Recently uploaded (9)

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
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Boas práticas técnica para um código limpo (Clean Code)

Editor's Notes

  1. Se um nome requer um comentário, é um nome ruim.
  2. Que tipo de coisas há na lista? O que significa o valor 4?
  3. Que tipo de coisas há na lista? O que significa o valor 4?
  4. Programar é social. Nosso cérebro tem o costume de ler e não de decifrar. Você conversa com o código.
  5. Blocos de edentação é indício de que está fazendo muita coisa
  6. Tem que valer os bytes que consomem!
  7. Pode ser levado como um gosto pessoal. Mas valem os padrões determinados pelo time/equipe.
  8. A Lei de Demeter aborda um problema específico do acoplamento e apresenta princípios para organizar e reduzir as dependências entre classes.
  9. Obriga tratamento de nulo Tira legibilidade do código