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
Johnny Lin
September 05, 2022
Programming
0
140
Clean Code
Johnny Lin
September 05, 2022
Tweet
Share
More Decks by Johnny Lin
See All by Johnny Lin
初探Rust.pdf
johnny178
0
120
Other Decks in Programming
See All in Programming
CSC307 Lecture 05
javiergs
PRO
0
500
AI & Enginnering
codelynx
0
110
「ブロックテーマでは再現できない」は本当か?
inc2734
0
890
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
380
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
200
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
180
ThorVG Viewer In VS Code
nors
0
770
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
CSC307 Lecture 03
javiergs
PRO
1
490
CSC307 Lecture 04
javiergs
PRO
0
660
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
Grafana:建立系統全知視角的捷徑
blueswen
0
330
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Bash Introduction
62gerente
615
210k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
55
A Soul's Torment
seathinner
5
2.2k
Why Our Code Smells
bkeepers
PRO
340
58k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Leo the Paperboy
mayatellez
4
1.4k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
GraphQLとの向き合い方2022年版
quramy
50
14k
Transcript
讓你的Code 更乾淨🧹 Johnny Lin @Anue Tech Sharing, 2022/09/07
1. Clean Code 2. 命名 3. 函式 4. 註解 Outline
什麼是Clean Code? 優雅、簡單、明瞭 沒有重複的程式碼 能通過所有的測試 較少的相依性
Why Clean Code?
閱讀程式碼、寫程式時間比例 -> 10:1
閱讀程式碼、寫程式時間比例 -> 10:1 花時間寫更簡潔的Code >> 日後閱讀與維護
閱讀程式碼、寫程式時間比例 -> 10:1 花時間寫更簡潔的Code >> 日後閱讀與維護
閱讀程式碼、寫程式時間比例 -> 10:1 花時間寫更簡潔的Code >> 日後閱讀與維護 Clean Code is IMPORTANT
有意義的命名
微小差距的名稱: XYZControllerForEfficientHandlingOfString XYZControllerForEfficientStoreageOfString 避免誤導
同時使用小寫L 、大寫O 當變數名稱 避免誤導
IShapeFactory 與ShapeFactory: 多餘的I 字首 簡短且有力、避免多餘的單詞命名
IShapeFactory 與ShapeFactory: 多餘的I 字首 accountData 與account: 多餘的Data 單詞 簡短且有力、避免多餘的單詞命名
讓名稱代表意圖
函式
「關於函式的首要準則,就是要簡短。第二項準則,就是要比第一項的簡短函式還 要更簡短。」 簡短!
僅兩行、三行或四行 每個函式帶領你到下一個函式 「關於函式的首要準則,就是要簡短。第二項準則,就是要比第一項的簡短函式還 要更簡短。」 簡短!
Single Responsibility Principle(SRP) 「函式應該只做一件事。它們應該把這件事做好。而且他們只做這件事。」 只做一件事
Single Responsibility Principle(SRP) 「函式應該只做一件事。它們應該把這件事做好。而且他們只做這件事。」 如何判斷? 只做一件事
A module should have one, and only one reason to
change. Single Responsibility Principle(SRP) 「函式應該只做一件事。它們應該把這件事做好。而且他們只做這件事。」 如何判斷? 只做一件事
A module should have one, and only one reason to
change. 如果我們以文字的方式描述一個函式,看到其中包含了「不同層次」的抽象概念 步驟,就可以判斷這個程式包含了不只一件事。 Single Responsibility Principle(SRP) 「函式應該只做一件事。它們應該把這件事做好。而且他們只做這件事。」 如何判斷? 只做一件事
One thing
1. 判斷此頁面是否為測試頁面 2. 如果是測試頁面的話,則納入設定與拆解步驟 3. 將此頁面轉換為HTML 網頁
一件事還是三件事?
判斷此頁面是否為測試頁面 如果是測試頁面的話,則納入設定與拆解步驟 將此頁面轉換為HTML 網頁 TO RenderPageWithSetupsAndTeardowns 一件事還是三件事?
生活中的例子: 洗澡 只做一件事
「將flag 變數傳遞給函式,等於大聲宣布此函數做超過一件事。」 - Uncle Bob flag 參數
try 開頭,catch/finally 結尾,不含有其他程式碼 「函式只做一件事,而錯誤處理就是一件事」 錯誤處理就是一件事
程式變得擁擠 重複的改變,倍數增長的工時 避免重複的程式碼 不要重複自己 Don't Repeat Yourself(DRY)
註解
用程式碼表達你的本意 「寫註解的其中一個動機,是因為程式碼寫的太糟糕。」 - Uncle Bob 註解無法彌補糟糕的程式碼
在每個檔案的開頭都會寫入著作權聲名 法律型註解 有益的註解
沒辦法使用少量的單字為變數命名,或是用適當的動詞作為函式的命名 對意圖的解釋 有益的註解
docstring 有益的註解
喃喃自語 糟糕的註解
干擾型註解 糟糕的註解
交給Git 被註解的程式碼 糟糕的註解
“The only way to go fast is to go well.“
- Uncle Bob
https://medium.com/%E6%89%8B%E5%AF%AB%E7%AD%86%E8%A8%98/clean-code-index- 51e209cc47db Reference
Thank you for listening