写程式必备的原则 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 原则的介绍,希望你都学会了!