SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Clean Code
clean code
Como garantir que seu trabalho seja
uma amostra grátis do inferno...
clean code
Use nomes que
revelem o seu
propósito
clean code
● Se um nome necessita de um comentário, então ele não revela o
seu propósito
● O nome de uma variável jamais deve conter a palavra variável, o
nome de uma tabela jamais deve conter o nome tabela/table
● Facilite a busca, não use só uma letra como nome ou só um número
● O tamanho do nome deve ser proporcional ao tamanho do escopo
clean code
● A diferença do programador amador e do profissional é que o
profissional entende que clareza é fundamental e não tenta ficar se
exibindo com códigos super difíceis.
● Nome de metodos devem ser verbos, exemplo: postar_pagamento,
excluir_pagina, salvar_pessoa
clean code
● Definir um padrão de nomenclatura, não utilizar verbos diferentes.
Exemplo: obter_pessoa(), recuperar_pessoa(), pegar_pessoa(). É
preciso estabelecer um padrão e usar o mesmo verbo em classes
diferentes. Exemplo: obter_pessoa() na classe pessoa,
obter_cliente() na classe cliente.
● Usar uma palavra por conceito. Por exemplo: para exclusão, utilizar
a palavra excluir nos métodos de exclusão de todas as classes,
para recuperar utilizar obter em todas as classes, etc.
clean code
● Utilize constantes
● O que é o 45?!
● O que tem na posição 2?!
clean code
Comentários
clean code
● Não insira comentários em código ruim, reescreva-o
● Desejamos colocar comentário pois nem sempre encontramos uma
forma de nos expressar sem eles
● Quando estiver em uma situação que seja colocar comentários no
seu código, pense bem se isso não pode ser transcrito no código
● Comentários errados ou desatualizados são piores que nenhum
comentário
clean code
Métodos/Funções
clean code
● Fazer o método em passos, ou seja, um método principal com
varios dentro
● O programa deve ser lido como se fosse uma série de parágrafos,
cada um descrevendo o nível atual e fazendo referência aos
parágrafos consecutivos
● Métodos devem ser pequenos
clean code
clean code
● Blocos dentro de if/else/while devem ter apenas uma linha, uma
chamada a um método (método com um nome significativo)
clean code
● Os métodos devem fazer apenas uma coisa (coesão)
● O código deve ser lido de cima para baixo com uma narrativa (regra
decrescente)
● Princípio de responsabilidade única
clean code
● Antigamente se falava que as funções/métodos devem caber no
monitor, mas isso era no passado, os monitore eram menores e às
fontes maiores. Hoje um método não deve passar de 20 linhas. O
ideal é ter 4 ou 5 linhas.
clean code
Parâmetros de
métodos
clean code
● Usar 3 no máximo parâmetros
● Passar um booleano por parâmetro é uma péssima prática, pois
além de dificultar o entendimento da assinatura do método, mostra
explicitamente que o método faz mais de uma coisa. Criar dois
métodos ao invés de um que receba true e false
● Evitar muitas condições no mesmo if, refatorar essas condições
para um método
clean code
● Deve ser evitado parâmetros de saída em um método, caso precise
alterar o estado de algo, faça mudar o estado do objeto que
pertence.
● Evite: public void adicionar_rodape(relatorio){}
● Melhor fazer assim: relatorio.adicionar_rodape();
clean code
● Colocar os blocos que estiverem dentro do try em um outro método,
não deixar tudo no mesmo bloco (os métodos devem fazer apenas
uma coisa e tratar o erro é só uma coisa)
clean code
Formatação
clean code
● Agrupar em blocos os códigos que estão intimamente ligados,
como por exemplo duas variáveis
● Declaração de variável: deve-se declarar as variáveis o mais
próximo possível de onde serão usadas
● Variáveis de instância devem ser declaradas no início da classe
clean code
● Métodos dependentes devem ficar próximos. De preferência quem
estiver chamando deve ficam em cima.
● O espaço em branco deve ser usado para separar operações, sinais
(+-*/) e assinatura de metodos com parametros.
clean code
clean code
Objetos e estrutura
de dados
clean code
● Não fazer carrinho de trem:
teste().teste1().teste2()
teste = teste();
teste1 = teste.teste1(); #validar objeto nulo
teste2 = teste1.teste2(); #validar objeto nulo
clean code
Testes
clean code
● Quanto maior a cobertura de testes menor o medo (100% cobertura
de testes existe?????)
● Os testes não devem ter qualidade menor do que o código de
produção, pois o código de produção evolui e os testes devem
evoluir junto
● Os códigos de teste são tão importantes quanto os códigos de
produção
clean code
● Se não mantiver seus testes limpos irá perdê-los e terá que fazer de
novo
● Um método de teste deve ter um único assert, pois isso mostra que
que o testes faz uma única coisa (mesma lógica nos
métodos/funções)
clean code
● Como testar esse código?
● Quantos testes serão
necessários para validar
todas as condições?
clean code
Métricas de
qualidade de
código
clean code
Complexidade
ciclomática
clean code
● Indica a complexidade que um trecho que código possui
● O resultado da complexidade ciclomática indica quantos testes
(pelo menos) precisam ser executados para que se verifique todos
os fluxos possíveis que o código pode tomar, a fim de garantir uma
completa cobertura de testes.
clean code
● Quanto custa entender esse código?!
clean code
Métodos
ponderados por
classe
clean code
● Esta é uma métrica de complexidade de código que indica que uma
classe não pode ter muitos métodos
● Geralmente, se uma classe possui muito métodos ela não é coesa,
ou seja, não faz uma única coisa.
clean code
Profundidade na
árvore de herança
clean code
● Uma classe que possui muitos filhos ou mais que três pais, gera um
alto nível de acoplamento no código, além de aumentar
drasticamente a complexidade
● Deste caso, o programador deve, conhecer os metodos da classe
atual, e os métodos de todas as classes pai.
clean code
Bad smells
clean code
Código duplicado
clean code
● Código duplicado quebra um dos princípios da orientação a objetos
que é reutilização de código
● Programadores duplicam código para mostrar “trabalho” (métrica
de commit), e por dificuldade de entender o código já existente
● Corrigir bugs em dois lugares
● Duplicar testes
clean code
Classes grandes
Métodos grandes
Longa lista de parâmetros

Mais conteúdo relacionado

Mais procurados

Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerpugpe
 
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoSeu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoChristiane Morais Silva
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensivaKayo Rayner
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
LabMM3 - Aula teórica 02
LabMM3 - Aula teórica 02LabMM3 - Aula teórica 02
LabMM3 - Aula teórica 02Carlos Santos
 
Algoritmos e Visualg parte 1
Algoritmos e Visualg   parte 1Algoritmos e Visualg   parte 1
Algoritmos e Visualg parte 1Marcio Pinto
 
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
Poo1   aula 3 - java - comentários instruções e blocos-palavras chavePoo1   aula 3 - java - comentários instruções e blocos-palavras chave
Poo1 aula 3 - java - comentários instruções e blocos-palavras chaveDenis Sobrenome
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
Minicurso c++-see-2013
Minicurso c++-see-2013Minicurso c++-see-2013
Minicurso c++-see-2013Renan Prata
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoJose Augusto Cintra
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em PhpAlmir Mendes
 

Mais procurados (20)

Python tdc2019
Python tdc2019 Python tdc2019
Python tdc2019
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debugger
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
7 interfaces
7 interfaces7 interfaces
7 interfaces
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de códigoSeu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
Seu app a prova de gambiarras (ou não) - Ferramentas de validaSPção de código
 
Manual robotec
Manual robotecManual robotec
Manual robotec
 
Java script
Java scriptJava script
Java script
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
LabMM3 - Aula teórica 02
LabMM3 - Aula teórica 02LabMM3 - Aula teórica 02
LabMM3 - Aula teórica 02
 
Algoritmos e Visualg parte 1
Algoritmos e Visualg   parte 1Algoritmos e Visualg   parte 1
Algoritmos e Visualg parte 1
 
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
Poo1   aula 3 - java - comentários instruções e blocos-palavras chavePoo1   aula 3 - java - comentários instruções e blocos-palavras chave
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Aula 04
Aula 04Aula 04
Aula 04
 
Minicurso c++-see-2013
Minicurso c++-see-2013Minicurso c++-see-2013
Minicurso c++-see-2013
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php
 

Semelhante a Gisele

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
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
 
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
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
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
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Lógica de programação 2
Lógica de programação 2Lógica de programação 2
Lógica de programação 2José Lopes
 
Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Yasser Veleda
 

Semelhante a Gisele (20)

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Clean code
Clean codeClean code
Clean code
 
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
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
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...
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
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
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Lógica de programação 2
Lógica de programação 2Lógica de programação 2
Lógica de programação 2
 
Clean Code
Clean CodeClean Code
Clean Code
 
Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)
 
Clean Code
Clean CodeClean Code
Clean Code
 
Revisão de C# 4.0
Revisão de C# 4.0Revisão de C# 4.0
Revisão de C# 4.0
 

Gisele

  • 2. clean code Como garantir que seu trabalho seja uma amostra grátis do inferno...
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. clean code Use nomes que revelem o seu propósito
  • 8. clean code ● Se um nome necessita de um comentário, então ele não revela o seu propósito ● O nome de uma variável jamais deve conter a palavra variável, o nome de uma tabela jamais deve conter o nome tabela/table ● Facilite a busca, não use só uma letra como nome ou só um número ● O tamanho do nome deve ser proporcional ao tamanho do escopo
  • 9. clean code ● A diferença do programador amador e do profissional é que o profissional entende que clareza é fundamental e não tenta ficar se exibindo com códigos super difíceis. ● Nome de metodos devem ser verbos, exemplo: postar_pagamento, excluir_pagina, salvar_pessoa
  • 10. clean code ● Definir um padrão de nomenclatura, não utilizar verbos diferentes. Exemplo: obter_pessoa(), recuperar_pessoa(), pegar_pessoa(). É preciso estabelecer um padrão e usar o mesmo verbo em classes diferentes. Exemplo: obter_pessoa() na classe pessoa, obter_cliente() na classe cliente. ● Usar uma palavra por conceito. Por exemplo: para exclusão, utilizar a palavra excluir nos métodos de exclusão de todas as classes, para recuperar utilizar obter em todas as classes, etc.
  • 11. clean code ● Utilize constantes ● O que é o 45?! ● O que tem na posição 2?!
  • 13. clean code ● Não insira comentários em código ruim, reescreva-o ● Desejamos colocar comentário pois nem sempre encontramos uma forma de nos expressar sem eles ● Quando estiver em uma situação que seja colocar comentários no seu código, pense bem se isso não pode ser transcrito no código ● Comentários errados ou desatualizados são piores que nenhum comentário
  • 15. clean code ● Fazer o método em passos, ou seja, um método principal com varios dentro ● O programa deve ser lido como se fosse uma série de parágrafos, cada um descrevendo o nível atual e fazendo referência aos parágrafos consecutivos ● Métodos devem ser pequenos
  • 17. clean code ● Blocos dentro de if/else/while devem ter apenas uma linha, uma chamada a um método (método com um nome significativo)
  • 18. clean code ● Os métodos devem fazer apenas uma coisa (coesão) ● O código deve ser lido de cima para baixo com uma narrativa (regra decrescente) ● Princípio de responsabilidade única
  • 19. clean code ● Antigamente se falava que as funções/métodos devem caber no monitor, mas isso era no passado, os monitore eram menores e às fontes maiores. Hoje um método não deve passar de 20 linhas. O ideal é ter 4 ou 5 linhas.
  • 21. clean code ● Usar 3 no máximo parâmetros ● Passar um booleano por parâmetro é uma péssima prática, pois além de dificultar o entendimento da assinatura do método, mostra explicitamente que o método faz mais de uma coisa. Criar dois métodos ao invés de um que receba true e false ● Evitar muitas condições no mesmo if, refatorar essas condições para um método
  • 22. clean code ● Deve ser evitado parâmetros de saída em um método, caso precise alterar o estado de algo, faça mudar o estado do objeto que pertence. ● Evite: public void adicionar_rodape(relatorio){} ● Melhor fazer assim: relatorio.adicionar_rodape();
  • 23. clean code ● Colocar os blocos que estiverem dentro do try em um outro método, não deixar tudo no mesmo bloco (os métodos devem fazer apenas uma coisa e tratar o erro é só uma coisa)
  • 25. clean code ● Agrupar em blocos os códigos que estão intimamente ligados, como por exemplo duas variáveis ● Declaração de variável: deve-se declarar as variáveis o mais próximo possível de onde serão usadas ● Variáveis de instância devem ser declaradas no início da classe
  • 26. clean code ● Métodos dependentes devem ficar próximos. De preferência quem estiver chamando deve ficam em cima. ● O espaço em branco deve ser usado para separar operações, sinais (+-*/) e assinatura de metodos com parametros.
  • 28. clean code Objetos e estrutura de dados
  • 29. clean code ● Não fazer carrinho de trem: teste().teste1().teste2() teste = teste(); teste1 = teste.teste1(); #validar objeto nulo teste2 = teste1.teste2(); #validar objeto nulo
  • 31. clean code ● Quanto maior a cobertura de testes menor o medo (100% cobertura de testes existe?????) ● Os testes não devem ter qualidade menor do que o código de produção, pois o código de produção evolui e os testes devem evoluir junto ● Os códigos de teste são tão importantes quanto os códigos de produção
  • 32. clean code ● Se não mantiver seus testes limpos irá perdê-los e terá que fazer de novo ● Um método de teste deve ter um único assert, pois isso mostra que que o testes faz uma única coisa (mesma lógica nos métodos/funções)
  • 33. clean code ● Como testar esse código? ● Quantos testes serão necessários para validar todas as condições?
  • 36. clean code ● Indica a complexidade que um trecho que código possui ● O resultado da complexidade ciclomática indica quantos testes (pelo menos) precisam ser executados para que se verifique todos os fluxos possíveis que o código pode tomar, a fim de garantir uma completa cobertura de testes.
  • 37. clean code ● Quanto custa entender esse código?!
  • 39. clean code ● Esta é uma métrica de complexidade de código que indica que uma classe não pode ter muitos métodos ● Geralmente, se uma classe possui muito métodos ela não é coesa, ou seja, não faz uma única coisa.
  • 41. clean code ● Uma classe que possui muitos filhos ou mais que três pais, gera um alto nível de acoplamento no código, além de aumentar drasticamente a complexidade ● Deste caso, o programador deve, conhecer os metodos da classe atual, e os métodos de todas as classes pai.
  • 44. clean code ● Código duplicado quebra um dos princípios da orientação a objetos que é reutilização de código ● Programadores duplicam código para mostrar “trabalho” (métrica de commit), e por dificuldade de entender o código já existente ● Corrigir bugs em dois lugares ● Duplicar testes
  • 45. clean code Classes grandes Métodos grandes Longa lista de parâmetros