javascript - DRY - 如何将此 if 语句交换为不太复杂的

标签 javascript if-statement dry

假设我们有这六个变量:a,b,c,x,y,z。 有没有更好的方法来编写这个不那么难读的 if 语句?

if (((!a && !x) || a === x) && ((!b && !y) || b === y) && ((!c && !z) || c === z))

现在让这些变量更长,这段代码会更复杂,可读性更差。

最佳答案

一种明显的方法是将重复的代码功能化:

function checkVars(a, b) {
  return !a && !b  ||  a === b;
}

// ...
if (checkVars(a, x) && checkVars(b, y) && checkVars (c, z)) {
// ...
}

正如正确地提到的,你应该给这个函数一个描述性的名字,显示它的真正作用。显然,它检查给定变量是否为假或它们是否相同,因此一个明显的选择是 falsyOrIdentical。那么你的 if 语句就会变成真正的 self 注释:

if (falsyOrIdentical(a, x) 
 && falsyOrIdentical(b, y) 
 && falsyOrIdentical(c, z)) {

 // here goes the code
} 

如果要检查更多变量,Pavlo 的方法(使用 slice.call(arguments) 的单个函数将所有变量转换为数组,然后应用此函数直到它对每个元素都失败这个数组的 every 方法)是最好的。但话又说回来,我真的想知道所有这些变量不应该实际上是集合的一部分 - 这样你就可以立即使用 every

关于javascript - DRY - 如何将此 if 语句交换为不太复杂的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420856/

相关文章:

javascript if 复选框的条件仅运行一次

javascript - 如何在 javascript 代码片段中应用 DRY 原则

Javascript 帮我做这个,这样它就干了

C# If(textbox.text=number) 错误

javascript - 是否可以通过 <b> 标签分割字符串?

javascript - Dynamoose 如何让多个模型共享一个表?

javascript - 如何在每个具有多个 vCPU 的多个 Google App Engine 实例之间共享缓存?

java - 彩票 - 猜正确的数字

jQuery 为两个不同的事件运行相同的代码

Javascript:如何直接从对象生成格式化的易于阅读的 JSON?