如何以更好的方式表示以下if else
条件?
if ((!StringUtils.isEmpty(A) && !StringUtils.isEmpty(B)) {
System.out.println("Case 1");
} else if ((!StringUtils.isEmpty(A) && StringUtils.isEmpty(B)) {
System.out.println("Case 2");
} else if ((StringUtils.isEmpty(A) && !StringUtils.isEmpty(B)) {
System.out.println("Case 3");
} else if ((StringUtils.isEmpty(A) && StringUtils.isEmpty(B)) {
System.out.println("Case 4");
} else {
System.out.println("End");
}
答案 0 :(得分:4)
假设Case 1
和Case 4
不应该具有相同的条件,这消除了End
的可能性,您可以这样做:
if (StringUtils.isEmpty(A)) {
if (StringUtils.isEmpty(B)) {
System.out.println("Case 4");
} else {
System.out.println("Case 3");
}
} else {
if (StringUtils.isEmpty(B)) {
System.out.println("Case 2");
} else {
System.out.println("Case 1");
}
}
或者您可以使用switch语句,只需要一点点数学:
switch ((StringUtils.isEmpty(A) ? 2 : 0) | (StringUtils.isEmpty(B) ? 1 : 0)) {
case 0: // !empty(A) & !empty(B)
System.out.println("Case 1");
break;
case 1: // !empty(A) & empty(B)
System.out.println("Case 2");
break;
case 2: // empty(A) & !empty(B)
System.out.println("Case 3");
break;
default: // empty(A) & empty(B)
System.out.println("Case 4");
}
答案 1 :(得分:3)
这是我能想到的最清楚的方式,写下你的例子。
请注意,我已使用小写字母的标准Java约定作为标识符。如果您确实已将变量命名为here A
和A
,无论出于何种原因,您可以考虑使用更多标准名称。
B
答案 2 :(得分:1)
我建议为每个条件设置更小的函数,以提高可读性。
此外,您不需要第五个条件,重新排序条件使其更具可读性
import static <pkg>.StringUtils.isEmpty;
if (bothEmpty(A,B)) {
System.out.println("Case 4");
} else if (isEmpty(A)) {
System.out.println("Case 2");
} else if (isEmpty(B)) {
System.out.println("Case 3");
} else {
System.out.println("Case 1");
}
boolean bothEmpty(String A, String B){
return isEmpty(A) && isEmpty(B);
}
如果条件满足,我通常会返回值。这避免了一些重复和嵌套的if-else案例。
public originalAction(String A, String B){
System.out.println(value(A,B));
}
String value(String A, String B){
if (bothEmpty(A,B)) return "Case 4";
if (isEmpty(A)) return "Case 2";
if (isEmpty(B)) return "Case 3";
return "Case 1";
}
boolean bothEmpty(String A, String B){
return isEmpty(A) && isEmpty(B);
}