如果有重复的代码或具有重复的条件

时间:2016-08-03 08:33:05

标签: java performance optimization

鉴于下一个代码示例,您认为哪个更好,或者您能想到以更优雅的方式对此进行编码的另一种方式吗?

if中的重复条件(两次检查'b')

if(a || b) {
  doAB();
}
if(b) {
  doB();
}

重复代码(两次doAB()):

if(a) {
  doAB();
}
if(b) {
  doAB();
  doB();
}

或混合......

if(a || b) {
  doAB();
  if(b) {
    doB();
  }
}

修改

一位同事提出了这个建议:

int mask = a?1:b?2:0;
switch(mask) {
  case 2:
    doB();
  case 1:
    doAB();
}

2 个答案:

答案 0 :(得分:4)

我猜第一个是最好的,因为第二个很可能是不正确的。我会使用你认为简单且不易出错的形式。

最喜欢的第二个例子应该是

if (a) {
  doAB();
} else if (b) {
  doAB();
  doB();
}
  

如果是a,则不能为b,反之亦然

在这种情况下,您不需要两个条件。它应该是==!b

// a || b is always true
doAB();
if(b) {
  doB();
}

答案 1 :(得分:2)

完全不同的观点:避免使用if / else的东西。

在OO语言中,您可以使用多态而不是if / else。而不是要求某个州;然后调用一个特定的方法;你只需在某个对象上调用一个方法;并且对象的类型将确保该方法执行正确的操作。

换句话说:在某些时候,您决定必须实例化哪个具体类;以后,你不用担心了。

你知道,smalltalk语言甚至没有 if (作为关键字/语言构建int)。

当然,你不应该进去,只是换另一个。相反,你可以退后一步,然后判断你的问题是如何被重新构建的;利用多态性。

你可以在这里找到一个非常好的video,它可以在现实中看起来如何。