Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Clean Code
Search
Gustavo Barbosa
June 20, 2012
Programming
0
130
Clean Code
Talk given to my colleagues at Quatix.
Gustavo Barbosa
June 20, 2012
Tweet
Share
More Decks by Gustavo Barbosa
See All by Gustavo Barbosa
Arquitetura de Apps em Cenários Offline
barbosa
2
340
Diet View Controllers
barbosa
0
220
CocoaPods: The dependency manager for Objective-C projects
barbosa
0
59
Parse
barbosa
0
130
Introduction to Object
barbosa
0
56
git-flow: a successful branching model
barbosa
4
94
Git: The fast version control system
barbosa
0
240
Other Decks in Programming
See All in Programming
止められない医療アプリ、そっと Swift 6 へ
medley
1
150
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
CSC305 Lecture 03
javiergs
PRO
0
240
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.5k
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
250
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
690
Catch Up: Go Style Guide Update
andpad
0
210
私はどうやって技術力を上げたのか
yusukebe
43
18k
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
980
The Flutter Journey of Building a Live Streaming App — With a Side of Performance Tuning
u503
1
110
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
440
Advance Your Career with Open Source
ivargrimstad
0
470
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
Unsuck your backbone
ammeep
671
58k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
We Have a Design System, Now What?
morganepeng
53
7.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
900
Art, The Web, and Tiny UX
lynnandtonic
303
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Why Our Code Smells
bkeepers
PRO
339
57k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
CLEAN CODE escrevendo código limpo
DISCLAIMER
OVERVIEW
SOBRE O QUE FALAREI • nomenclaturas • funções • classes
• formatação • comentários • objetos • estrutura de dados • tratamento de exceções • boundaries • unit testing
SOBRE O QUE NÃO FALAREI • dependency injection • TDD
• refactoring • emergência • concorrência • frameworks de teste • JUnit
fonte: http://www.osnews.com/story/19266/WTFs_m
O QUE É UM CÓDIGO LIMPO? • direto ao ponto
• mínimas dependências • sem duplicação • fácil manutenção • padrões definidos • de fácil leitura/entendimento • coberto de testes • elegante
“NÃO SOU UM EXCELENTE DESENVOLVEDOR. SOU APENAS UM DESENVOLVEDOR MEDIANO
QUE SEGUE À RISCA AS BOAS PRÁTICAS DE UM CÓDIGO LIMPO.” (um dev muito famoso)
NOMES SIGNIFICATIVOS !
NOMES SIGNIFICATIVOS
USEM NOMES QUE REVELEM A INTENÇÃO
NOMES SIGNIFICATIVOS
USEM NOMES PRONUNCIÁVEIS
NOMES SIGNIFICATIVOS
USEM NOMES BUSCÁVEIS
NOMES SIGNIFICATIVOS
TAMBÉM NOMEAMOS CLASSES E MÉTODOS
NOMES SIGNIFICATIVOS CLASSES MÉTODOS em geral, classes devem ser representadas
por substantivos, não verbos. bons exemplos: Cliente, Perfil, Estoque, etc. em geral, métodos devem ser representadas por verbos ou frases verbais bons exemplos: enviarPagamento, removerPagina, salvar, etc. (prefira o infinitivo)
NÃO SEJA PIADISTA :)
FUNÇÕES !
SEJA PEQUENO
•menos é sempre mais! •extraia trechos em métodos privados •lembre-se
dos nomes significativos ;) •vá direto ao ponto FUNÇÕES
FUNÇÕES
FAÇA UMA ÚNICA COISA
•repare a endentação (sim, é assim que escreve ;) •muitos
níveis ~= muita responsabilidade •o método deve fazer uma única coisa, e bem! •dá para extrair? está fazendo mais de uma coisa FUNÇÕES
LEIA O CÓDIGO DE CIMA PARA BAIXO
•seu código deve ser lido como uma narrativa •temos sujeitos,
verbos e predicados :) •narrativas são frases com uma ordem coerente •lembre-se disso ao extrair em métodos privados FUNÇÕES
FUNÇÕES E SEUS ARGUMENTOS
•muitos argumentos ~= code smell •existem algumas regras para qtd
de argumentos •argumentos booleanos em geral não são bons •ex: FUNÇÕES
FUNÇÕES
EVITE OS SIDE EFFECTS
FUNÇÕES
EXCEÇÕES SÃO MELHORES QUE CÓDIGOS DE ERRO
FUNÇÕES
DRY (DON’T REPEAT YOURSELF)
COMENTÁRIOS !
COMENTÁRIOS NÃO AJUDAM UM CÓDIGO SUJO
•em geral, servem para explicar um código ruim •um bom
código é auto-documentado COMENTÁRIOS •extraia para um método que faça o que diz!
COMENTÁRIOS ACEITÁVEIS
•comentários sobre licença •comentários informativos •necessidade de explicação de intenção
(negócio) COMENTÁRIOS
COMENTÁRIOS RUINS
•por falta do que escrever •redundantes •doc em APIs não-públicas
•dizendo algo que o próprio código deveria dizer •código comentado :/ COMENTÁRIOS
COMENTÁRIOS
FORMATAÇÃO !
O QUE VALE É A REGRA DO TIME
MAS EXISTEM ALGUNS PADRÕES DE LINGUAGENS
PYTHON: PEP8
E JAVASCRIPT?
LIMITES HORIZONTAIS
ENDENTAÇÃO, QUEBRA DE LINHAS E TERNÁRIOS
E O IDIOMA?
OBJETOS E ESTRUTRA DE DADOS
ABSTRAÇÃO DE DADOS
None
None
•objetos expõem comportamentos e escondem dados •estruturas de dados expõem
seus dados e não têm comportamentos significativos OBJETOS E ESTRUTURAS DE DADOS
A LEI DE DEMETER
•um método f de uma classe C só conhece: •métodos
de C •objetos criados por f •objetos passados como argumentos para f •objetos em variáveis de instância de C OBJETOS E ESTRUTURAS DE DADOS
None
TRATAMENTO DE ERRO
EXCEÇÕES AO INVÉS DE CÓDIGO DE ERRO ;)
TRATAMENTO DE EXCEÇÃO É UMA DAS COISAS QUE UMA FUNÇÃO/MÉTODO
FAZ
None
NÃO USE EXCEÇÕES GENÉRICAS
VOCÊ TAMBÉM PODE CRIAR EXCEÇÕES!
NÃO RETORNE NULL
None
NÃO PASSE NULL
CLASSES !
BASICAMENTE AS MESMAS DICAS DE FUNÇÕES ;)
PARTIU ALMOÇAR? ! :D
MUITO OBRIGADO @gustavocsb