这是关于允许多语句if
和switch
表达式以及引入do
表达式的新提案。通过新规则,函数或分支中的最后一个表达式为返回值,无需return
关键字(函数/闭包用return
,if
或switch
用then
),此规则源于对then
关键字的原始提案反馈。
- PR 地址:https://github.com/swiftlang/swift-evolution/pull/2639
Last-value 规则:用于确定函数的返回值、
if
或switch
表达式单个分支中的值,还引入了do
表达式。- 动机:
SE-0380
引入了if
和switch
表达式作为表达式,但未包含多语句分支,此规则可解决该问题,如在switch
中允许多个语句的分支,避免使用旧技术;还能减少代码编写中的一些不便,如避免return
关键字的添加,使if
表达式更清晰,让do
表达式更可行等。 - 详细设计:函数返回非
Void
值时,最后一个表达式为隐含返回值;if
和switch
表达式可执行多个语句后以表达式结束;do
语句也成为表达式,有相应规则,如guard
语句不建议使用隐式返回等。 - 对现有代码的影响:大部分源兼容,仅在少数边缘情况(如闭包)可能导致源破坏,可通过
backticks
解决,建议在即将推出的功能标志下引入该特性。 - 考虑的替代方案:多种替代方案被考虑,如像 Ruby 那样以最后一个表达式为值、Rust 的变体等,最终权衡后选择了无关键字的“最后表达式”规则,因为其更具一致性和可读性。
- 源兼容性:在兼容性测试套件中发现罕见的边缘情况可能导致源破坏,但可通过
backticks
解决,且会回溯到早期编译器版本。 - 对 ABI 稳定性的影响:无影响。
- 动机:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。