If语句- If和else If做同样的事情



我正在尝试重构一个看起来不是特别好的if-else链。我的常识告诉我,我应该只能调用我的方法一次,但我想不出一个优雅的方法来做到这一点。目前我有:

if(condition1)
  do method1;
else if(condition2)
  do method1;

看起来很丑。有重复代码!我能想到的最好的是:

if(condition1 || (!condition1 && condition2))
  do method1;

但是这看起来也很糟糕,因为我在or之后否定了condition1,这似乎是不必要的…

我做了一个真值表:

 c1| c2| r
 0 | 0 | 0
 0 | 1 | 1
 1 | 0 | 1
 1 | 1 | 1

如果有人感兴趣,我遇到的现实生活中的问题是,我在javascript中有2个Fancytree的实例,我想设置一些规则来在它们之间传输节点。树A只能将单个节点转移到树B,而树B可以自由地重新排序,所以我把它放在树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;

所以我认为这是你最好的答案。

它在逻辑上与你的真值表不一样,所以如果真值表r是要做的,那么你的真值表或你当前的代码是错误的do method1;

文字

if (condition1 || condition2) {
    //code1
}

如果condition1正确,则执行code1,如果condition1不正确,则只检查condition2,并相应地执行代码。因此,它将与

相同
if ( condition1 ) {
    //method1
} else if ( condition2 ) {
    //method1
}

相关内容

  • 没有找到相关文章

最新更新