关于Java switch语句 - 在每种情况下使用return和省略中断

Nic*_*bey 48 java return case break switch-statement

鉴于这种方法,这是否代表了一些令人震惊的风格或语义失误:

private double translateSlider(int sliderVal) {
    switch (sliderVal) {
        case 0:
            return 1.0;
        case 1:
            return .9;
        case 2:
            return .8;
        case 3:
            return .7;
        case 4:
            return .6;
        default:
            return 1.0;
    }
}  
Run Code Online (Sandbox Code Playgroud)

这显然不符合这里的Java教程.

然而,它清晰,简洁,到目前为止已经完全符合我的需要.是否有令人信服的实用理由创建局部变量,在每种情况下为其赋值,为每个案例添加一个中断并在方法结束时返回值?

roc*_*boy 59

将值赋给局部变量然后在末尾返回它被认为是一种很好的做法.具有多个出口的方法难以调试并且难以阅读.

那就是说,这是这个范例留下的唯一加分点.它起源于只有低级程序语言.而那时它更有意义.

在讨论这个主题时,你必须检查一下.这是一个有趣的读物.

  • 链接SO帖子并说多个出口都很糟糕.到目前为止,该问题的最高投票答案始于"它主要取决于个人偏好",并以"强制执行单一退出点是一个毫无意义甚至适得其反的限制恕我直言"结束.-_-*长叹* (9认同)

小智 15

如果是Java 14+,你可以使用这样的switch函数表达式:

return switch(region) {
    case "us-east-1" -> Region.US_EAST_1;
    default -> Region.US_EAST_1;
};
Run Code Online (Sandbox Code Playgroud)


Ale*_*ien 6

从人工智能角度来看,你的代码很好.从静态代码分析工具视图中,有多个返回,这使得调试更加困难.例如,你不能在返回之前立即设置一个断点.

此外,您不会在专业应用程序中硬编码4个滑块步骤.使用max-min等计算值,或者在数组中查找它们:

public static final double[] SLIDER_VALS = {1.0, 0.9, 0.8, 0.7, 0.6};
public static final double SLIDER_DEFAULT = 1.0;


private double translateSlider(int sliderval) {
  double ret = SLIDER_DEFAULT;
  if(sliderval >= 0 && sliderval < SLIDER_VALS.length) {
      ret = SLIDER_VALS[sliderval];
  } 
  return ret;
}
Run Code Online (Sandbox Code Playgroud)