if-statement - if 和 else if 做同样的事情

标签 if-statement refactoring logic

我正在尝试重构一个看起来不太好的 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-statement - if 和 else if 做同样的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30530467/

相关文章:

java - 是否有一种工具可以根据一组已知的 "used"类来检测未使用的 Java 代码?

ruby - 如何检查输入是否为整数?- Ruby

methods - 组织 Gradle 构建逻辑的任务或方法之间的最佳选择是什么?

if-statement - lua中定义逻辑运算符隐含

ios - 如何最好地子类化 NSManagedObject 以提供一组核心方法

swift - 如何在 Swift 中对 UILabel 和 String 使用 IF 语句?

java - 我如何在java中重构/提取这个气味代码的方法?

java - Java 中的错误逻辑

ios - Swift 中的逻辑问题

Java 二十一点投注和发牌并没有按照我的预期进行