if 和 else if 做同样的事情
if and else if do the same thing
我正在尝试重构一个看起来不太好的 if-else 链。我的常识告诉我,我应该只能调用我的方法一次,但我想不出一种优雅的方法来做到这一点。目前我拥有的是:
if(condition1)
do method1;
else if(condition2)
do method1;
这看起来很可怕。有重复代码!我能想到的最好的是:
if(condition1 || (!condition1 && condition2))
do method1;
但这看起来也很糟糕,因为我在 or 之后否定 condition1
,这似乎没有必要...
我为此说了一个道理table:
c1| c2| r
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
如果有人感兴趣,我遇到的现实问题是我在 javascript 中有 2 个 Fancytree 实例,我想设置一些规则来在它们之间传输节点。 Tree A 只能将单独的节点转移到 Tree B,而 Tree B 可以自由地重新排序,所以我把它放在 Tree B 的 dragDrop
事件上:
if(data.otherNode.tree === node.tree){
data.otherNode.moveTo(node, data.hitMode);
}
else if(!data.otherNode.hasChildren()){
data.otherNode.moveTo(node, data.hitMode);
}
您可以进一步简化 - 如果第一个条件是 true
,则应该调用该方法 而不管第二个条件 。因此,重构代码中的 !condition1
是多余的。相反,您可以:
if(condition1 || condition2)
do method1;
在现代编程语言中,if 条件甚至会短路。这意味着当第一个条件被评估为 true
时,第二个条件甚至不会被评估。
你的建议,
if(condition1 || (!condition1 && condition2))
do method1;
在逻辑上与
相同
if(condition1 || condition2)
do method1;
所以我认为这是你的最佳答案。
虽然它在逻辑上与你的真相 table 不同,所以你的真相 table 或你当前的代码是错误的,如果真相 table r 是为了做
do method1;
书面
if (condition1 || condition2) {
//code1
}
如果条件 1 正确则执行代码 1,如果条件 1 不正确则仅检查条件 2 并相应地执行代码。因此它与
相同
if ( condition1 ) {
//method1
} else if ( condition2 ) {
//method1
}
我正在尝试重构一个看起来不太好的 if-else 链。我的常识告诉我,我应该只能调用我的方法一次,但我想不出一种优雅的方法来做到这一点。目前我拥有的是:
if(condition1)
do method1;
else if(condition2)
do method1;
这看起来很可怕。有重复代码!我能想到的最好的是:
if(condition1 || (!condition1 && condition2))
do method1;
但这看起来也很糟糕,因为我在 or 之后否定 condition1
,这似乎没有必要...
我为此说了一个道理table:
c1| c2| r
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
如果有人感兴趣,我遇到的现实问题是我在 javascript 中有 2 个 Fancytree 实例,我想设置一些规则来在它们之间传输节点。 Tree A 只能将单独的节点转移到 Tree B,而 Tree B 可以自由地重新排序,所以我把它放在 Tree B 的 dragDrop
事件上:
if(data.otherNode.tree === node.tree){
data.otherNode.moveTo(node, data.hitMode);
}
else if(!data.otherNode.hasChildren()){
data.otherNode.moveTo(node, data.hitMode);
}
您可以进一步简化 - 如果第一个条件是 true
,则应该调用该方法 而不管第二个条件 。因此,重构代码中的 !condition1
是多余的。相反,您可以:
if(condition1 || condition2)
do method1;
在现代编程语言中,if 条件甚至会短路。这意味着当第一个条件被评估为 true
时,第二个条件甚至不会被评估。
你的建议,
if(condition1 || (!condition1 && condition2))
do method1;
在逻辑上与
相同if(condition1 || condition2)
do method1;
所以我认为这是你的最佳答案。
虽然它在逻辑上与你的真相 table 不同,所以你的真相 table 或你当前的代码是错误的,如果真相 table r 是为了做
do method1;
书面
if (condition1 || condition2) {
//code1
}
如果条件 1 正确则执行代码 1,如果条件 1 不正确则仅检查条件 2 并相应地执行代码。因此它与
相同if ( condition1 ) {
//method1
} else if ( condition2 ) {
//method1
}