我目前有这样的if语句:
if (condition1 || condition2) {
//Do stuff here
//Small things happened here
//More stuff
if (condition1) {
System.out.println("Thank");
// Do Task Alpha
// Do Task Beta
} else {
System.out.println("You");
// Do Task Delta
// Do Task Gamma
}
}
所以基本的想法是当任一条件为真时发生if语句(在我的情况下,两个条件不能同时为真)。
然而,一旦进入if语句,有一点如果第一个条件为真,则打印“Thank”并执行Task Alpha和Beta。如果第二个条件为真,则打印“你”并执行任务Delta和Gamma。在我们达到这个分歧点之前,会执行许多常见的陈述。
这是编写整个if语句的最佳/最简单方法吗?
感谢。
答案 0 :(得分:8)
如果
,您可以使用内部三元组String toPrint = test == null ? "Thank" : "You";
System.out.println(toPrint);
甚至
System.out.println(test == null ? "Thank" : "You");
答案 1 :(得分:3)
编写此操作的最佳方式与您的问题完全一样。如果condition1
是一个复杂的,可能很昂贵的表达式,请将其结果存储到本地boolean
变量中:
final boolean condition1Result = condition1;
if (condition1Result || condition2) {
//Do stuff here
//Small things happened here
//More stuff
if (condition1Result) {
System.out.println("Thank");
// Do Task Alpha
// Do Task Beta
} else {
System.out.println("You");
// Do Task Delta
// Do Task Gamma
}
}
考虑内联通用代码可能很诱人,即
if(condition1) {
//Do stuff here
//Small things happened here
//More stuff
System.out.println("Thank");
// Do Task Alpha
// Do Task Beta
} else if(condition2) {
//Do stuff here
//Small things happened here
//More stuff
System.out.println("You");
// Do Task Delta
// Do Task Gamma
}
但除非公共代码真的很小,否则我不会这样做。如果有益,JVM应该能够在运行时进行这样的优化,因此您应该更喜欢避免代码重复的变体。
如果整体代码过于复杂,请考虑将块重构为方法。
答案 2 :(得分:0)
如果if-else块发生在包装if
块的末尾 - 您可以在 if块后移动它们:
if (test == null || testStr.equals("testStr")) {
//Do stuff here
//Small things happened here
//More stuff
}
if (test == null) {
System.out.println("Thank");
} else if (testStr.equals("testStr")) {
System.out.println("You");
}
这样你只有一层嵌套。
答案 3 :(得分:0)
链接很多块会使代码更难维护。 避免这些链接块的一种方法是在到达满足条件之后不必执行的代码行之前更频繁地使用返回来退出方法。检查以下示例的重构版本:
private void someMethod(){
/*If none of the conditions is met, exits without
executing any code.*/
if (!(condition1 || condition2)) {
return;
}
/*Executes code common to any of the two conditions.*/
//Do stuff here
//Small things happened here
//More stuff
if (condition1) {
System.out.println("Thank");
// Do Task Alpha
// Do Task Beta
/*After executing the code for the 1st condition,
exit to avoid the code for the 2nd one to be executed.*/
return;
}
/*If the execution reached up to here, then the 2nd
condition was met and its corresponding code is executed.*/
System.out.println("You");
// Do Task Delta
// Do Task Gamma
}