干 - 如何将这个if语句交换成不太复杂的语句

cod*_*me- 2 javascript if-statement dry

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

if (((!a && !x) || a === x) && ((!b && !y) || b === y) && ((!c && !z) || c === z))
Run Code Online (Sandbox Code Playgroud)

现在让这些变量更长,这段代码将更复杂,可读性更低.

rai*_*7ow 5

一种显而易见的方法是使重复的代码功能化:

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

// ...
if (checkVars(a, x) && checkVars(b, y) && checkVars (c, z)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)

正确地提到,你应该给这个函数一个描述性的名字,显示它真正的作用.显然,它检查给定的变量是否是假的或它们是否相同,所以一个明显的选择是falsyOrIdentical.然后你的if陈述将成为真正的自我评论:

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

 // here goes the code
} 
Run Code Online (Sandbox Code Playgroud)

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

  • 如果可能,请记住将该功能命名为描述性的功能. (3认同)