java switch return_关于Java switch语句-在每个cas中使用return和省略中断

关于Java switch语句-在每个cas中使用return和省略中断

给定这种方法,这是否代表了一些过分的风格或语义上的假象:

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教程不符。

但是,它很清楚,简洁,到目前为止,完全满足了我的需求。 是否有一个令人信服的,务实的理由来创建局部变量,在每种情况下为其分配值,在每种情况下添加中断并在方法结束时返回该值?

9个解决方案

59 votes

将值分配给局部变量,然后最后返回该值被认为是一种好习惯。 具有多个出口的方法更难以调试,并且可能难以阅读。

也就是说,这就是该范例剩下的唯一优点。 它起源于只有低级的过程语言。 那时,它变得更加有意义。

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

rocketboy answered 2020-06-18T23:11:11Z

6 votes

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

此外,您不会在专业应用程序中对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;

}

AlexWien answered 2020-06-18T23:11:36Z

1 votes

我认为您所写的内容完全可以。 我也没有看到具有多个return语句的任何可读性问题。

当我知道要返回时,我总是希望从代码中的点返回,这样可以避免在返回以下运行逻辑。

可能有一个参数,即具有用于调试和记录的单个返回点。但是,在您的代码中,如果我们使用它,就不会出现调试和日志记录的问题。 它的编写方式非常简单易读。

Kevin Bhuva answered 2020-06-18T23:12:05Z

0 votes

不,您所拥有的一切都很好。 您也可以将其作为公式(sliderVal < 5 ? (1.0 - 0.1 * sliderVal) : 1.0)或使用Map,但是您所拥有的没问题。

yshavit answered 2020-06-18T23:12:25Z

0 votes

我建议您不要使用文字。

除此之外,样式本身看起来还不错。

William Morrison answered 2020-06-18T23:12:49Z

0 votes

如果您将要有一个方法,它只运行开关然后返回一些值,那么请确保此方法有效。 但是,如果要在方法中进行其他操作的切换,则不能使用return,否则该方法中的其余代码将无法执行。 注意本教程中的代码后如何打印? 您将无法执行此操作。

DanielD answered 2020-06-18T23:13:10Z

0 votes

是的,这很好。教程并不总是那么简洁和整洁。不仅如此,创建局部变量还浪费空间且效率低下

Xperiaz X answered 2020-06-18T23:13:30Z

0 votes

为什么不只是

private double translateSlider(int sliderval) {

if(sliderval > 4 || sliderval < 0)

return 1.0d;

return (1.0d - ((double)sliderval/10.0d));

}

还是类似的?

SubSevn answered 2020-06-18T23:13:54Z

-1 votes

对于计算机生成的字节码而言,人为逻辑的最佳情况是利用如下代码:

private double translateSlider(int sliderVal) {

float retval = 1.0;

switch (sliderVal) {

case 1: retval = 0.9;

case 2: retval = 0.8;

case 3: retval = 0.7;

case 4: retval = 0.6;

case 0:

default: break;

}

return retval;

}

因此从该方法中消除多重出口并在逻辑上利用该语言。 (即,当sliderVal为1-4的整数范围时,更改float值,否则,如果sliderVal为0且所有其他值,则retval保持相同的float值1.0)

但是,像这样的事情,sliderVal的每个整数值都是(n-(n/10))%4),一个人真的可以做一个lambda并获得更快的结果:

private double translateSlider = (int sliderVal) -> (1.0-(sliderVal/10));

编辑: 模数为4可能是为了保持逻辑(即(n-(n/10))%4))

Dwight Spencer answered 2020-06-18T23:14:27Z

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值