寫程式必備的原則 DRY (Don't Repeat Yourself)
2024年2月21日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
DRY 是什麼?
DRY 原則是寫程式中,經常會用到的概念。DRY 是 Don't Repeat Yourself 的簡寫,意思是不要重複你寫過的程式碼。過 DRY 原則,你寫出的程式碼會更好維護與延展。
你可能會問,如何做到不重複呢? 讓我們透過具體的例子來看看。
範例
假設今天我們有個產品資訊的表單,要做欄位的校驗,我們可以寫以下兩個函式,一個是校驗產品名稱的 validateTitle
,另一個是校驗產品描述的 validateDescription
。可以看到,這兩個函式中的邏輯相似,基本上是重複的有很大一部分的重複。
// 校驗產品名稱
function validateTitle(title) {
// 如果沒有名稱
if (!title) {
return "產品名稱不得空白";
}
// 如果名稱長度小於 5
if (title.length < 5) {
return "產品名稱至少要 5 個字";
}
return null; // 如果通過上述判斷,則回傳 null
}
// 校驗產品描述
function validateDescription(desription) {
// 如果沒有描述
if (!desription) {
return "產品描述不得空白";
}
// 如果描述長度小於 10
if (desription.length < 10) {
return "產品描述至少要 10 個字";
}
return null; // 如果通過上述判斷,則回傳 null
}
用 DRY 原則改寫
這時我們可以用上 DRY 原則,把校驗的部分抽出來。寫一個校驗欄位 validateField
函式,來避免重複。
// 校驗欄位
function validateField(fieldName, minLength) {
// 如果沒有欄位名稱
if (!fieldName) {
return `${fieldName} 不得空白`;
}
// 如果欄位名稱長度小於傳入的最小長度
if (fieldName.length < minLength) {
return `${fieldName} 至少要 ${minLength} 個字`;
}
return null; // 如果通過上述判斷,則回傳 null
}
validateField("產品名稱", 5);
validateField("產品描述", 10);
validateField("使用者姓名", 2);
validateField("收件地址", 15);
當抽出 validateField
,之後不管是產品名稱、產品描述、使用者姓名、收件地址,都可以直接傳入 validateField,這樣就不用每個都重複寫一次,程式碼也會更好維護。
以上是 DRY 原則的介紹,希望你都學會了!