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
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Clean Code
Talk given to my colleagues at Quatix.
Gustavo Barbosa
June 20, 2012
More Decks by Gustavo Barbosa
See All by Gustavo Barbosa
Arquitetura de Apps em Cenários Offline
barbosa
2
370
Diet View Controllers
barbosa
0
230
CocoaPods: The dependency manager for Objective-C projects
barbosa
0
66
Parse
barbosa
0
140
Introduction to Object
barbosa
0
76
git-flow: a successful branching model
barbosa
4
100
Git: The fast version control system
barbosa
0
250
Other Decks in Programming
See All in Programming
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.7k
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
400
霧の中の代数的エフェクト
funnyycat
1
410
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
自作OSでスライド発表する
uyuki234
1
3.9k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
160
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
420
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
350
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
180
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
150
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
New Earth Scene 8
popppiees
3
2.4k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Scaling GitHub
holman
464
140k
Navigating Weather and Climate Data
rabernat
0
390
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
270
Embracing the Ebb and Flow
colly
88
5.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
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