Clean Code 筆記(1)
Clean Code的原則包含了多種面向,透過Clean Code的學習,可以使你全方位的檢視自己撰寫與他人撰寫的程式碼是否足夠整潔。
以下為自己整理的Clean Code學習筆記:
變數
好的變數命名應該要能夠名副其實,比方說:
1 | |
永遠比
1 | |
要來得糟。
- 避免使用 O 0 I L 這些容易誤導、寫錯的字元
- 使用能唸出來的名稱,團隊溝通會使用到
- 使用可被搜尋到的名字 除錯時會使用到
- 介面與繼承,可使用 Student、StudentImpl作為命名
- 命名應該直觀,符合開發人員的想像
- 類別應以名詞命名、方法應以動詞命名
函式
設計原則
- 讓函式只做一件事,SRP。
- 參數的數量越少越好,方便開發者了解參數對整理輸出的影響
- 不要帶boolean進function,違背了SRP。
- 如果要傳入多個參數,用物件包裝會更好,至少符合相同概念。
- 輸入與指令分離,ex:判斷條件與操作物件是兩個不同層級的概念,不要放在一起
- 不要有副作用,避免不可預料的BUG發生
- 以try catch 取代if 判斷,減少巢狀迴圈。
物件與資料結構
抽象化設計界面
1
2FuelTankCapacityInGallons();
double getGallonsOfGasoline();1
2
3public interface Vehicle {
double getPercentFuelRemaining();
}採用後者的設計方式可以隱藏資料的細節。
資料結構的程式碼
1
2
3
4
5
6
7
8
9
10
11class NPC {
void talk(Object object) {
if (object instanceof Merchant) {
// do something
} else if (object instanceof Smith) {
// do something
} else {
throw new Exception("error");
}
}
}
- 在NPC類別中,要擴充一個新的類別很麻煩,必須要更動所有原先相關的程式碼,以符合函式的架構
- 在NPC類別中,新增新的方法很容易,不需更動既有程式碼
- 物件導向的程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13class Merchant implements NPC {
public talk() {
// do something
}
}
class Smith implements NPC {
public talk() {
// do something
}
}
interface NPC {
talk();
}
- 在NPC類別中,要寫一個新的類別很容易,不需更動既有程式碼
- 在NPC類別中,新增新的方法很麻煩,必須要更動每一個繼承NPC的類別
例外處理
- 視情況,選擇封裝Exception
- 不要傳遞Null
節錄
Clean Code 筆記(1)
https://clark1945.github.io/2024/12/26/Clean-Code-筆記-1/