if-else结构

时间:2010-04-07 07:12:48

标签: java readability if-statement

我有这些冗长的陈述,我将在这里称为x,y等。 我的条件语句的结构如下:

if(x || y || z || q){
    if(x)
       do someth
    else if (y)
       do something

    if(z)
       do something
    else if(q)
       do something
}
else
    do smthing

有没有更好,更短的方式来写这个东西?感谢

6 个答案:

答案 0 :(得分:4)

我现在看不出你怎么写的大问题。 我建议使用大括号,即使是单个语句if-blocks。这将帮助您避免错误,以防您以后必须添加更多代码行(并可能忘记添加花括号)。我觉得它也更具可读性。 代码看起来像这样:

if (x || y || z || q) {
    if (x) {
       do something
    } else if (y) {
       do something
    }

    if (z) {
       do something
    } else if (q) {
       do something
    }
} else {
    do something
}

答案 1 :(得分:4)

避免多重检查和错误复杂逻辑表达式的另一种变体可能是:

boolean conditionhandled = false;
if (x) {
   do something
   conditionhandled = true;
} else if (y) {
   do something
   conditionhandled = true;
}

if (z) {
   do something
   conditionhandled = true;
} else if (q) {
   do something
   conditionhandled = true;
}

if (!conditionhandled) {
   do something
}

答案 2 :(得分:1)

这对我来说非常清楚(明确是好的)。

你可以做的是首先评估x,y,z和q并将它们存储为变量,这样你就不必两次了。

答案 3 :(得分:1)

也许这更容易阅读。但现在你将进行一次额外检查。如果它不是关键任务代码,那么您可以使用以下内容:

if (x)
  do something;
else if (y)
  do something;

if (z)
  do something;
else if(q)
  do something;

if !(x || y || z || q)
  do something completely different.

答案 4 :(得分:0)

我不推荐以下内容,事实上,我认为你得到的很好,但是:

s = true;
if (x) {
    do something;
    s = false;
} else if (y) {
    do something;
    s = false;
}
if (z) {
    do something;
    s = false;
} else if (q) {
    do something;
    s = false;
}

if (s) {
    so something;
}

答案 5 :(得分:0)

你能对x,y,z,q做一些假设吗? 例如。只有其中一个可以是真的。你可以把它看作一个国家

enum State {
X{
  void doSomething(){
    doItTheXWay();
  }  
},
Y{
  void doSomething(){
    doItTheYWay();
  }  
},
Z{
  void doSomething(){
    doItTheZWay();
  }  
},
Q{
  void doSomething(){
    doItTheQWay();
  }  
};
  void doSomething(){

  }
}

并在您使用if语句的代码中

你可以指定一个州并做正确的事

State state = getAState();
state.doSomething();

如果您不喜欢枚举,则State可以是接口,而X to Q可以实现类。 在这种情况下的好处是多次使用相同的if else构造。稍后说一些代码行,你会以

开头
if(x)
  do_the_next_thing_with_X();
...

或者您可以使用其他功能扩展您的枚举并进行一次调用

state.doTheNextThing();