这是关于允许多语句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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。