我有这些长语句,我将在这里称为 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
有没有更好、更短的方法来写这个东西?谢谢
我有这些长语句,我将在这里称为 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
有没有更好、更短的方法来写这个东西?谢谢
我认为你现在的写作方式没有什么大问题。我建议即使对于单语句 if 块也使用花括号。这将帮助您避免错误,以防您以后必须添加更多代码行(然后可能会忘记添加花括号)。我也觉得它更具可读性。代码将如下所示:
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
}
避免多重检查和容易出错的复杂逻辑表达式的另一个变体可能是:
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
}
这对我来说似乎很清楚(清晰很好)。
您可以做的是首先评估 x、y、z 和 q 并将它们存储为变量,这样您就不必这样做两次。
也许这更容易阅读。但现在您将执行一项额外检查。如果它不是关键任务代码,那么也许您可以使用以下代码:
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.
我不推荐以下,事实上,我认为你得到的很好,但是:
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;
}
你能对 x,y,z,q 做一些假设吗?eG 只有其中之一可能是真的。比你能把它看作一个国家
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 到 Q 可能是实现类。这种情况下的好处是多次使用相同的 if else 构造。稍后说一些代码行,您将从
if(x)
do_the_next_thing_with_X();
...
或者您可以使用另一个函数扩展您的枚举并进行一次调用
state.doTheNextThing();