如果是冗余代码,则更简单的形式

时间:2017-10-11 03:59:25

标签: java if-statement

如何以更好的方式表示以下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");
        }

3 个答案:

答案 0 :(得分:4)

假设Case 1Case 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 AA,无论出于何种原因,您可以考虑使用更多标准名称。

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);
}