寫程式必備的原則 DRY (Don't Repeat Yourself)

2024年2月21日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

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 原則的介紹,希望你都學會了!

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們