通过引入switch表达式来增强Java switch语句

去年12月下旬,我发布了“ Switch Expressions Coming Java? 从那时起,进行了广泛的讨论,表达了意见分歧,现在就Javaswitch表达式的未来达成了共识。 我曾尝试在12月的博客文章中评论与switch表达式有关的一些主要发展。 但是,我觉得这周琥珀色观察者邮件列表上的Brian Goetz消息标题“ [switch] switch的进一步统一 ”保证了有关Java switch表达式的新博客文章。

格茨(Goetz)在结束讲话时提醒大家最终游戏不是Java开关表达式 。 相反,Goetz指出:“开关表达式应该只是实现真实目标的无可争议的起点,它是一种更具表现力和灵活性的开关构造,可在更广泛的情况下工作,包括支持模式,且不那么具有敌意设置为null,用作表达式或语句等。”

格茨还指出,“转机确实带来了很多负担”,他指出,“这种负担在讨论中产生了可预见的干扰。” 格茨指出:“最糟糕的结果是……发明一种与开关相似但不完全相同的新结构……而不能100%替代当今的古怪开关。” 考虑到这种担忧,最初提出的开关表达式语法被舍弃了,因为它使讨论朝着“最糟糕的可能结果”迈进了一步。

新的交换机统一建议(称为“ Unification Attempt#2” [UA2])建议“ _all_交换机可以支持旧样式(冒号)或新样式(箭头)大小写标签,但必须坚持一种情况给定开关中的标签。” 这意味着给定switchcase标签必须全部使用我们今天在switch语句中使用的“冒号”语法或新提议的“ arrow”语法,但不能在同一switch同时使用。

开发人员可能会选择一种形式而不是另一种形式(“冒号”与“箭头”),这是有原因的。 Goetz强调了与switch的当前建议相关联的“箭头”语法的一些优点:“以全箭头的形式,人们讨厌开关的所有东西–需要说出中断,失败的风险以及可疑的作用域–所有走开。”

Goetz在本文中介绍了各种“开关形式”的“结构属性”如何驱动“控制流和作用域规则”。 如下表所示。

声明
(“交换机的非本地控制流_out_ [继续到封闭循环,带有标签的中断,返回]”)
表达
(总计:返回一个值)
结肠
(启用穿透)
switch我们知道和“爱”,但增强了 break返回的值类似于return
箭头
(防止掉线)
语句/冒号的“语法简写”(上)以及
  • “消除了“休息”的烦恼”
  • “隐式防止所有形式的失败”
  • “避免了电流开关范围的混乱”
箭头( -> )指向返回值

Goetz总结了上表显示的内容:“冒号形式为您提供了旧的控制流,而箭头形式为您提供了新的控制流。 并且可以用作语句或表达式。 没有人会因为混淆而感到困惑。” 他还特别描述了上表左下角的结构(带有“ arrow”语法的switch语句):“ Switch语句现在具有更简单的(箭头)风格,没有崩溃,没有奇怪的作用域并且没有大多数时候需要说休息。 可以用这种方式重写许多开关,甚至可以先教这种形式。”

Goetz的总结总结了他的文章:


结果是一个具有现代和传统风格的开关构造,它支持表达式或语句。 您可以立即查看开关的中间,并告诉(通过箭头还是冒号)它是否具有旧版控制流。

迄今为止 ,对拟议的“统一尝试#2”的总体反应是压倒性的,但并非没有预期的持续担忧 。 加文·比尔曼(Gavin Bierman) 总结了这一建议 ,他说:“这实际上是与增强而不是与新结构相对应的一切”,并指出:“在撰写本文时编写修订的规范–准备好!”

翻译自: https://www.javacodegeeks.com/2018/04/enhancing-java-switch-statement-with-introduction-of-switch-expression.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值