SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
What about Clean Code?

Marcelo Santos - @marcelsud
http://marcelosantos.com
What about Clean Code?
“It is not enough for code to work.”
Robert C. Martin (Uncle Bob)
Consequências de código ruim
●
●
●

Código duplicado
Classes longas (se houver)
Parâmetros demais

●
●
●
●
●
●
●
●
●
●
●
●

Falta de testes (ou nenhum)
Falta de Coding Standards
No design patterns at all
Código morto
Alta curva de aprendizado
Uma alteração, vários bugs
Alocação de mais recursos
Elevado custo em manutenção
Queda de produtividade
Perda de performance
Remendos / Gambiarras
...
A Regra do Escoteiro

“Deixe a área do acampamento mais limpa do que
como você a encontrou”
Boy Scouts of America
Nomes significativos

Onde?
Como?

●

● Pronunciáveis
Que revele seu propósito

● Variáveis
● Métodos
● Parâmetros
● Classes
● Namespaces
● etc
Nomes ruins
Nomes melhores
Parâmetros demais

Os métodos devem ter um número pequeno de parâmetros.
Nenhum é o ideal.
Acima de três é questionável.
Parâmetros demais
Poucos parâmetros
Comentários
Comentários

"Não insira comentários num código ruim, reescreva-o"
Brian W. Kernighan e P. J. Plaugher
Não faça isso…
Lembre-se...

Se você precisa esclarecer seu código com um
comentário, talvez seja um bom momento para
revê-lo.
Duplicação

DRY: Don’t Repeat Yourself
Sempre que você vir duplicação em código, isso significa que
você perdeu uma chance para abstração.
Encontre e elimine duplicações sempre que puder!
Código morto

●

● Variáveis não utilizadas
● Pedaços de código inúteis
Comentários que não acrescentam informações

Faça a coisa certa: Dê a eles um funeral decente!
Flag Arguments

“Argumentos Booleanos claramente declaram que o
método possui mais que uma responsabilidade. Eles
são confusos e devem ser eliminados.”
Uncle Bob
Flag Arguments
Flag Arguments
Encapsular condicionais

melhor que...
Substituir números mágicos por constantes

melhor que...
Evitar condicionais negativas

melhor que...
Coding Standards

“Softwares são feitos para ser lidos por humanos, e somente
incidentemente para ser executados por computadores”
H. Abelson and G. Sussman
Tratamento de erros

● Evitar retornar um código de erro
● Lançar excessões com contexto
● Não retornar NULL
● Utilizar mensagens informativas
Testes unitários

Fast: Devem ser rápidos.
Independent: Sem depender uns dos outros e na hora que desejar.
Repeatable: Devem passar tanto no servidor, quanto num notebook sem wi-fi.
Self-validating: Devem garantir o resultado sem intervenção manual.
Timely: Devem ser criados antes do código.
Classes

LoD: Law of Demeter
Design by Contract
Design Patterns
Orthogonality
Cohesion
SOLID
SOLID
SRP: Single responsibility principle
a class should have only a single responsibility.

OCP: Open/closed principle
“software entities … should be open for extension, but closed for modification”.

LSP: Liskov substitution principle
“objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program”

ISP: Interface segregation principle
“many client-specific interfaces are better than one general-purpose interface.”

DIP: Dependency inversion principle
one should “Depend upon Abstractions. Do not depend upon concretions.”
Classes

KISS: Keep it simple, stupid!
"A perfeição é alcançada não quando não há mais nada para adicionar,
mas quando não há mais nada que se possa retirar"
Antoine de Saint-Exupéry, autor de "O Pequeno Príncipe"

Toda complexidade desnecessária deve ser descartada.
What about Clean Code?

Marcelo Santos - @marcelsud
http://marcelosantos.com

Mais conteúdo relacionado

Destaque

Protocolos cromaticos con esencias minerales
Protocolos cromaticos con esencias mineralesProtocolos cromaticos con esencias minerales
Protocolos cromaticos con esencias mineralesGeofarma
 
Protocolo propuesto geomedicina
Protocolo propuesto geomedicinaProtocolo propuesto geomedicina
Protocolo propuesto geomedicinaGeofarma
 
Protocolo de esencias minerales con respaldo clinico
Protocolo de esencias minerales con respaldo clinicoProtocolo de esencias minerales con respaldo clinico
Protocolo de esencias minerales con respaldo clinicoGeofarma
 
Protocolo de esencias minerales con respaldo clinico (2)
Protocolo de esencias minerales con respaldo clinico (2)Protocolo de esencias minerales con respaldo clinico (2)
Protocolo de esencias minerales con respaldo clinico (2)Geofarma
 
Protocolos generales con esencias minerales
Protocolos generales con esencias mineralesProtocolos generales con esencias minerales
Protocolos generales con esencias mineralesGeofarma
 
Protocolos especificos con esencias minerales
Protocolos especificos con esencias mineralesProtocolos especificos con esencias minerales
Protocolos especificos con esencias mineralesGeofarma
 
Tqs epp-home-04-guia rápido de operação
Tqs epp-home-04-guia rápido de operaçãoTqs epp-home-04-guia rápido de operação
Tqs epp-home-04-guia rápido de operaçãoAnderson Ricardo Cunha
 
Hbitosdoscasaisfelizes 140216021004-phpapp01
Hbitosdoscasaisfelizes 140216021004-phpapp01Hbitosdoscasaisfelizes 140216021004-phpapp01
Hbitosdoscasaisfelizes 140216021004-phpapp01Janio Clímaco
 
Keck North Slope Projects
Keck North Slope ProjectsKeck North Slope Projects
Keck North Slope ProjectsEvan Lewis
 
Spelling l20
Spelling l20Spelling l20
Spelling l20Ed Navlag
 
Tqs 01-epp-edificações de pequeno porte
Tqs 01-epp-edificações de pequeno porteTqs 01-epp-edificações de pequeno porte
Tqs 01-epp-edificações de pequeno porteAnderson Ricardo Cunha
 
Tarea5
Tarea5Tarea5
Tarea5pcharo
 

Destaque (16)

Protocolos cromaticos con esencias minerales
Protocolos cromaticos con esencias mineralesProtocolos cromaticos con esencias minerales
Protocolos cromaticos con esencias minerales
 
Protocolo propuesto geomedicina
Protocolo propuesto geomedicinaProtocolo propuesto geomedicina
Protocolo propuesto geomedicina
 
Cantilever Racks (Heavy Duty)
Cantilever Racks (Heavy Duty)Cantilever Racks (Heavy Duty)
Cantilever Racks (Heavy Duty)
 
Protocolo de esencias minerales con respaldo clinico
Protocolo de esencias minerales con respaldo clinicoProtocolo de esencias minerales con respaldo clinico
Protocolo de esencias minerales con respaldo clinico
 
Protocolo de esencias minerales con respaldo clinico (2)
Protocolo de esencias minerales con respaldo clinico (2)Protocolo de esencias minerales con respaldo clinico (2)
Protocolo de esencias minerales con respaldo clinico (2)
 
Instructivo enfoque ambiental
Instructivo enfoque ambientalInstructivo enfoque ambiental
Instructivo enfoque ambiental
 
Protocolos generales con esencias minerales
Protocolos generales con esencias mineralesProtocolos generales con esencias minerales
Protocolos generales con esencias minerales
 
Protocolos especificos con esencias minerales
Protocolos especificos con esencias mineralesProtocolos especificos con esencias minerales
Protocolos especificos con esencias minerales
 
Evaluation Writing
Evaluation WritingEvaluation Writing
Evaluation Writing
 
Tqs epp-home-04-guia rápido de operação
Tqs epp-home-04-guia rápido de operaçãoTqs epp-home-04-guia rápido de operação
Tqs epp-home-04-guia rápido de operação
 
Hbitosdoscasaisfelizes 140216021004-phpapp01
Hbitosdoscasaisfelizes 140216021004-phpapp01Hbitosdoscasaisfelizes 140216021004-phpapp01
Hbitosdoscasaisfelizes 140216021004-phpapp01
 
Miguel angel lara alfabetizacion economica y potencial de emprendimiento
Miguel angel lara   alfabetizacion economica y potencial de emprendimientoMiguel angel lara   alfabetizacion economica y potencial de emprendimiento
Miguel angel lara alfabetizacion economica y potencial de emprendimiento
 
Keck North Slope Projects
Keck North Slope ProjectsKeck North Slope Projects
Keck North Slope Projects
 
Spelling l20
Spelling l20Spelling l20
Spelling l20
 
Tqs 01-epp-edificações de pequeno porte
Tqs 01-epp-edificações de pequeno porteTqs 01-epp-edificações de pequeno porte
Tqs 01-epp-edificações de pequeno porte
 
Tarea5
Tarea5Tarea5
Tarea5
 

Semelhante a Clean code

Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoPaulo Henrique da Silva
 
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
 
Community webcast
Community webcastCommunity webcast
Community webcastYan Justino
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
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...Thiago Barradas
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
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 SoftwareGabriel Felipe Soares
 
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
 

Semelhante a Clean code (20)

Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
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 - ...
 
Community webcast
Community webcastCommunity webcast
Community webcast
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
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
Clean codeClean code
Clean code
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Clean Code
Clean CodeClean Code
Clean Code
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Clean code
Clean codeClean code
Clean code
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
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
 
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
 

Clean code

  • 1. What about Clean Code? Marcelo Santos - @marcelsud http://marcelosantos.com
  • 2. What about Clean Code? “It is not enough for code to work.” Robert C. Martin (Uncle Bob)
  • 3. Consequências de código ruim ● ● ● Código duplicado Classes longas (se houver) Parâmetros demais ● ● ● ● ● ● ● ● ● ● ● ● Falta de testes (ou nenhum) Falta de Coding Standards No design patterns at all Código morto Alta curva de aprendizado Uma alteração, vários bugs Alocação de mais recursos Elevado custo em manutenção Queda de produtividade Perda de performance Remendos / Gambiarras ...
  • 4. A Regra do Escoteiro “Deixe a área do acampamento mais limpa do que como você a encontrou” Boy Scouts of America
  • 5.
  • 6.
  • 7.
  • 8. Nomes significativos Onde? Como? ● ● Pronunciáveis Que revele seu propósito ● Variáveis ● Métodos ● Parâmetros ● Classes ● Namespaces ● etc
  • 11. Parâmetros demais Os métodos devem ter um número pequeno de parâmetros. Nenhum é o ideal. Acima de três é questionável.
  • 15. Comentários "Não insira comentários num código ruim, reescreva-o" Brian W. Kernighan e P. J. Plaugher
  • 17. Lembre-se... Se você precisa esclarecer seu código com um comentário, talvez seja um bom momento para revê-lo.
  • 18. Duplicação DRY: Don’t Repeat Yourself Sempre que você vir duplicação em código, isso significa que você perdeu uma chance para abstração. Encontre e elimine duplicações sempre que puder!
  • 19. Código morto ● ● Variáveis não utilizadas ● Pedaços de código inúteis Comentários que não acrescentam informações Faça a coisa certa: Dê a eles um funeral decente!
  • 20. Flag Arguments “Argumentos Booleanos claramente declaram que o método possui mais que uma responsabilidade. Eles são confusos e devem ser eliminados.” Uncle Bob
  • 24. Substituir números mágicos por constantes melhor que...
  • 26. Coding Standards “Softwares são feitos para ser lidos por humanos, e somente incidentemente para ser executados por computadores” H. Abelson and G. Sussman
  • 27. Tratamento de erros ● Evitar retornar um código de erro ● Lançar excessões com contexto ● Não retornar NULL ● Utilizar mensagens informativas
  • 28. Testes unitários Fast: Devem ser rápidos. Independent: Sem depender uns dos outros e na hora que desejar. Repeatable: Devem passar tanto no servidor, quanto num notebook sem wi-fi. Self-validating: Devem garantir o resultado sem intervenção manual. Timely: Devem ser criados antes do código.
  • 29. Classes LoD: Law of Demeter Design by Contract Design Patterns Orthogonality Cohesion SOLID
  • 30. SOLID SRP: Single responsibility principle a class should have only a single responsibility. OCP: Open/closed principle “software entities … should be open for extension, but closed for modification”. LSP: Liskov substitution principle “objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program” ISP: Interface segregation principle “many client-specific interfaces are better than one general-purpose interface.” DIP: Dependency inversion principle one should “Depend upon Abstractions. Do not depend upon concretions.”
  • 31. Classes KISS: Keep it simple, stupid! "A perfeição é alcançada não quando não há mais nada para adicionar, mas quando não há mais nada que se possa retirar" Antoine de Saint-Exupéry, autor de "O Pequeno Príncipe" Toda complexidade desnecessária deve ser descartada.
  • 32. What about Clean Code? Marcelo Santos - @marcelsud http://marcelosantos.com