什麼是 Clean Code?
寫出「乾淨的程式碼」(clean code)是許多開發者的目標,因為它不僅讓程式易於閱讀、維護,還能減少 bug 和技術債。以下是一些核心原則和實用的建議,幫助你寫出 clean code:
1. 命名要有意義
原則:變數、函數、類別的名稱應該清楚表達它的用途,避免模糊或過於簡短的命名。
壞例子:
int x = 10; // x 是什麼?
void f(); // f 做什麼?
好例子:
int userAge = 10; // 表示使用者的年齡
void calculateTotalPrice(); // 表示計算總價格
2. 函數要短小且單一職責
原則:一個函數只做一件事,保持短小精悍(理想上是幾行到 20 行左右)。
壞例子:
function processOrder(order) {
// 驗證訂單
if (!order.items) return false;
// 計算價格
let total = order.items.reduce((sum, item) => sum + item.price, 0);
// 儲存到資料庫
database.save(order);
}
好例子:
function validateOrder(order) {
return order.items && order.items.length > 0;
}
function calculateTotalPrice(items) {
return items.reduce((sum, item) => sum + item.price, 0);
}
function saveOrder(order) {
database.save(order);
}
建議:如果函數超過一個螢幕高度,考慮拆分;命名要能反映單一目的。
3. 命名要有意義
原則:好的程式碼應該靠命名和結構來說明意圖,而不是依賴大量註解。
壞例子:
// 檢查使用者是否成年
if (a > 18) {
return true;
}
好例子:
boolean isAdult(int age) {
return age > 18;
}
建議:保留必要的註解(例如解釋「為什麼」而不是「做了什麼」),但避免多餘的註解。
4. 一致的格式與風格
原則:程式碼的縮排、括號位置、命名慣例要一致,這樣讀起來才舒服。
壞例子:
void Func(int x){if(x>0)printf("Hi");}
好例子:
void printGreeting(int count) {
if (count > 0) {
printf("Hi");
}
}
建議:使用工具(如 Prettier、ESLint)自動格式化,或遵循團隊的 coding style(例如 Google 或 Airbnb 規範)。
5. 避免重複(DRY - Don’t Repeat Yourself)
原則:重複的程式碼應該提取成函數、類別或模組。
壞例子:
print("User: " + name + ", Age: " + str(age))
print("User: " + name2 + ", Age: " + str(age2))
好例子:
def printUserDetails(name, age):
print(f"User: {name}, Age: {age}")
printUserDetails(name, age)
printUserDetails(name2, age2)
建議:看到三次以上重複時,考慮抽象化。
6. 錯誤處理要清晰
原則:明確處理異常情況,避免讓程式默默失敗。
壞例子:
def divide(a, b):
return a / b # 如果 b 是 0 會崩潰
好例子:
def divide(a, b):
if b == 0:
raise ValueError("除數不能為 0")
return a / b
建議:使用 try-catch 或條件檢查,並給予有意義的錯誤訊息。
7. 保持簡單(KISS - Keep It Simple, Stupid)
原則:不要過度設計,選擇最直接的解決方案。
壞例子:
const result = ((arr) => arr.map((x) => x * 2).reduce((a, b) => a + b, 0))(
numbers
);
好例子:
let sum = 0;
for (let num of numbers) {
sum += num * 2;
}
建議:優先考慮可讀性而非炫技。
總結
Clean code 的核心是可讀性、可維護性和簡潔性。你可以參考 Robert C. Martin 的《Clean Code》一書,裡面有更詳細的指導。實務上,建議:
- 寫完程式碼後重新審視,問自己:「半年後的我能看懂嗎?」
- 請同事 code review,聽取外部意見。
- 多練習,隨著經驗累積,你的程式碼自然會更乾淨。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 kimfei2014@gmail.com