【问题标题】:Simplifying Java IF-ELSE简化 Java IF-ELSE
【发布时间】:2020-08-29 10:09:13
【问题描述】:

假设有一个带有 n 个条件的“if 语句”:

if (a == b || x == '0' || z == '1' .... || s == 'e') {      // < n conditions 
    result = do_something(); 
}

可以改写如下:

switch (??) {
   case a == b:
   case x == '0':
   case z == '1';
   ...
   case s == 'e':
        result = do_something();
        break;
   default:
        break;
}

感觉比由 OR/AND 运算符分隔的多个条件更易读,也更简洁。如果需要添加另一个条件,那么我们可以添加另一个案例。

这可能吗?如果是,请分享一个实现。

原始的“if 语句”本身是否是错误编码的结果,因此应该被视为整个代码需要重新审视和改进的暗示?

【问题讨论】:

  • 你试过后发生了什么?
  • @MarquisofLorne 我给出的那种 switch 语句不存在,也不起作用。我问了这个问题,希望我错过了在“IF 语句”中编写多个条件的某种方式,这使得它(条件)更易于管理。

标签: java if-statement switch-statement


【解决方案1】:

简短的回答是不,你不能,你也不应该。 您可以简单地以一种很好的方式对其进行格式化:

if (a == b 
   || x == '0' 
   || (z == '1' &&  a == 'e')
   || s == 'e') {      
    result = do_something(); 
}

很长的答案是你可以,但它会很混乱和不清楚!

在 Java(和大多数其他语言)中,switch 用于“切换”enumeration。所以你不能用像x == b这样的布尔表达式来切换。甚至像这样简单的事情都行不通:

 //NOT REAL JAVA CODE
 switch (true) {
        case true:
            Sytem.out.println("true");
            break;
        case false:
            Sytem.out.println("false");
            break;
    }

所以剩下的唯一方法是创建一个代表枚举......对于我能想到的所有情况来说,这都是一个坏主意。

如果 if 真的升级,请考虑以下简化思路

  • 评论更多
  • 改用循环
  • 改用更多 Ifs
  • 使用真值表来简化 if

【讨论】:

    【解决方案2】:

    当我们在预定义的集合中拥有有限数量的选项(例如:星期几)时,switch 语句是一个很好的选择。 我们无法在 switch 语句中比较所有类型的对象和原语。我们不能将空值作为参数传递给 switch 语句。如果我们这样做,程序将抛出 NullPointerException。

    如果你搜索,你会发现更多这样的东西。所以,为了可读性,不要改变 if 语句来切换大小写。您可以通过良好的格式、在提及条件使用的 if 块上添加 cmets、使用嵌套的 if 来使 if 语句更具可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多