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

2022-08-31 14:49:06

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

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

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

但是,它清晰,简洁,到目前为止已经产生了我需要的东西。是否有令人信服的、务实的理由来创建一个局部变量,在每个事例中为其赋值,为每个事例添加一个中断,并在方法结束时返回值?


答案 1

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

也就是说,这是这个范式唯一的加分点。它起源于只有低级程序语言存在的时候。这在当时更有意义。

当我们讨论这个话题时,您必须检查一下。这是一个有趣的阅读。


答案 2

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

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

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


private double translateSlider(int sliderValue) {
  double result = SLIDER_DEFAULT;
  if (sliderValue >= 0 && sliderValue < SLIDER_VALUES.length) {
      ret = SLIDER_VALUES[sliderValue];
  }

  return result;
}