假设我们有这六个变量: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/