写程式必备的原则 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 上追蹤我們