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
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5k
愛される翻訳の秘訣
kishikawakatsumi
3
370
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
950
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
300
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
710
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
クラウドに依存しないS3を使った開発術
simesaba80
0
220
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
37
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
1
220
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Test your architecture with Archunit
thirion
1
2.1k
Building Applications with DynamoDB
mza
96
6.9k
Raft: Consensus for Rubyists
vanstee
141
7.3k
Exploring anti-patterns in Rails
aemeredith
2
220
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
420
Typedesign – Prime Four
hannesfritz
42
2.9k
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