SlideShare uma empresa Scribd logo
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
Boas práticas técnica para um código limpo (Clean Code)
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
Boas práticas técnica para um código limpo (Clean Code)
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

Mais conteúdo relacionado

PPTX
TDD - Test Driven Development
Elias Nogueira
 
PDF
clean code
Douglas Siviotti
 
PPT
Análise Orientada a Objetos - Objetos E Classes
CursoSENAC
 
PPTX
Princípios SOLID
Edmilson Filho
 
PPS
Projeto de Software
Wagner Zaparoli
 
PDF
Modelos de Processo de Software Parte 3
Elaine Cecília Gatto
 
PDF
Analise e Desenho Orientado a Objetos com UML
Rildo (@rildosan) Santos
 
PDF
Arquitetura de Microserviços
Norberto Enomoto
 
TDD - Test Driven Development
Elias Nogueira
 
clean code
Douglas Siviotti
 
Análise Orientada a Objetos - Objetos E Classes
CursoSENAC
 
Princípios SOLID
Edmilson Filho
 
Projeto de Software
Wagner Zaparoli
 
Modelos de Processo de Software Parte 3
Elaine Cecília Gatto
 
Analise e Desenho Orientado a Objetos com UML
Rildo (@rildosan) Santos
 
Arquitetura de Microserviços
Norberto Enomoto
 

Mais procurados (20)

PPTX
Apresentação Clean Code
André Leoni
 
KEY
Clean code and Code Smells
Mario Sangiorgio
 
PPTX
Clean Code
Bruno Lui
 
KEY
Clean Code
Hendrik Ebel
 
PPTX
Clean Code
Victor Rentea
 
PPTX
Clean code slide
Anh Huan Miu
 
PDF
Clean code
Arturo Herrero
 
PPTX
Clean code
Henrique Smoco
 
PPTX
Clean Code
swaraj Patil
 
PPTX
Clean code
Mahmoud Zizo
 
PDF
Clean coding-practices
John Ferguson Smart Limited
 
PPTX
Clean Code (Robert C. Martin)
Yasser Veleda
 
PDF
Clean Code na Prática
Douglas Siviotti
 
PPTX
clean code book summary - uncle bob - English version
saber tabatabaee
 
PDF
Python - Introdução
fabiocerqueira
 
PPTX
Clean Code
Dmytro Turskyi
 
PPTX
Clean code
ifnu bima
 
PDF
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
PDF
Python - Introdução Básica
Christian Perone
 
PDF
Padrões de Projeto de Software
Fabio Moura Pereira
 
Apresentação Clean Code
André Leoni
 
Clean code and Code Smells
Mario Sangiorgio
 
Clean Code
Bruno Lui
 
Clean Code
Hendrik Ebel
 
Clean Code
Victor Rentea
 
Clean code slide
Anh Huan Miu
 
Clean code
Arturo Herrero
 
Clean code
Henrique Smoco
 
Clean Code
swaraj Patil
 
Clean code
Mahmoud Zizo
 
Clean coding-practices
John Ferguson Smart Limited
 
Clean Code (Robert C. Martin)
Yasser Veleda
 
Clean Code na Prática
Douglas Siviotti
 
clean code book summary - uncle bob - English version
saber tabatabaee
 
Python - Introdução
fabiocerqueira
 
Clean Code
Dmytro Turskyi
 
Clean code
ifnu bima
 
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
Python - Introdução Básica
Christian Perone
 
Padrões de Projeto de Software
Fabio Moura Pereira
 
Anúncio

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

PPTX
Clean code em C#
Gustavo Araújo
 
PPTX
Clean Code - Fork In Tuba
Rafael Paz
 
PPT
Boas praticas em_desenvolvimento_de_software
ivanassisleal
 
PPTX
Clean code @rogeriofontes-techfriday-everis
Rogerio Fontes
 
PPTX
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Thiago Barradas
 
PPTX
Clean Code: Por um mundo com códigos melhores - SETI 2017
Thiago Barradas
 
PPTX
ZeroBugsProject - Técnicas de programação efetivas
Rafael Chinelato Del Nero
 
PPTX
Clean code
William Caputo Lima
 
PPTX
Clean code - Mantenha seu código limpo
Tiago Bencardino
 
PPTX
Clean Coder
Camilo de Melo
 
KEY
Clean code
Gustavo Barbosa
 
PDF
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Pedro Edson Silva Barros
 
PDF
Clean Code
Daniel Tamiosso
 
PPTX
Cleaner-Code-CentralIT-2015
Valdemar Júnior
 
PPTX
Clean Code - Boas práticas para desenvolvimento
Paulo Henrique da Silva
 
PDF
A Arte do Código Limpo
Juliana Fideles
 
PPTX
Code Smells
Alan Willms
 
PDF
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
Joberto Diniz
 
PPTX
Codigo limpo.pptx
Rennan Cardoso Guarani Kaiowá
 
Clean code em C#
Gustavo Araújo
 
Clean Code - Fork In Tuba
Rafael Paz
 
Boas praticas em_desenvolvimento_de_software
ivanassisleal
 
Clean code @rogeriofontes-techfriday-everis
Rogerio Fontes
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Thiago Barradas
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Thiago Barradas
 
ZeroBugsProject - Técnicas de programação efetivas
Rafael Chinelato Del Nero
 
Clean code - Mantenha seu código limpo
Tiago Bencardino
 
Clean Coder
Camilo de Melo
 
Clean code
Gustavo Barbosa
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Pedro Edson Silva Barros
 
Clean Code
Daniel Tamiosso
 
Cleaner-Code-CentralIT-2015
Valdemar Júnior
 
Clean Code - Boas práticas para desenvolvimento
Paulo Henrique da Silva
 
A Arte do Código Limpo
Juliana Fideles
 
Code Smells
Alan Willms
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
Joberto Diniz
 
Anúncio

Mais de Rodrigo Kono (20)

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

Último (17)

PPTX
Curso de Java 8 - (Tratamento de Exceções, (try-catch-finally)).pptx
Anderson Maciel
 
PPTX
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
PPTX
Curso de Java 5 - (Strings) Tipo de Dados.pptx
Anderson Maciel
 
PPTX
Curso de Java 3 - (Estruturas de Controle, Decisão, Loop, Procedimento).pptx
Anderson Maciel
 
PPTX
Curso de Java 1 - (Introdução Geral).pptx
Anderson Maciel
 
PPTX
Curso de Java 6 - (Números, Data e Hora).pptx
Anderson Maciel
 
PPTX
Curso de Java 4 - (Orientação a Objetos).pptx
Anderson Maciel
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
PPTX
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
PPTX
21 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PPTX
22 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
PPTX
Curso de Java 2 - (PrimeiroPrograma, Variáveis, Tipos e Operadores.pptx
Anderson Maciel
 
PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PPTX
Curso de Java 7 - (ArrayList, Collections,(Set, List, Queue, Map)).pptx
Anderson Maciel
 
Curso de Java 8 - (Tratamento de Exceções, (try-catch-finally)).pptx
Anderson Maciel
 
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
Curso de Java 5 - (Strings) Tipo de Dados.pptx
Anderson Maciel
 
Curso de Java 3 - (Estruturas de Controle, Decisão, Loop, Procedimento).pptx
Anderson Maciel
 
Curso de Java 1 - (Introdução Geral).pptx
Anderson Maciel
 
Curso de Java 6 - (Números, Data e Hora).pptx
Anderson Maciel
 
Curso de Java 4 - (Orientação a Objetos).pptx
Anderson Maciel
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
21 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
22 - Lógica de Programação com Portugol.pptx
Anderson Maciel
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
Curso de Java 2 - (PrimeiroPrograma, Variáveis, Tipos e Operadores.pptx
Anderson Maciel
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
Curso de Java 7 - (ArrayList, Collections,(Set, List, Queue, Map)).pptx
Anderson Maciel
 

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

Notas do Editor

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