[提案] 最后一个表达式作为返回值

这是关于允许多语句ifswitch表达式以及引入do表达式的新提案。通过新规则,函数或分支中的最后一个表达式为返回值,无需return关键字(函数/闭包用returnifswitchthen),此规则源于对then关键字的原始提案反馈。

  • PR 地址https://github.com/swiftlang/swift-evolution/pull/2639
  • Last-value 规则:用于确定函数的返回值、ifswitch表达式单个分支中的值,还引入了do表达式。

    • 动机SE-0380引入了ifswitch表达式作为表达式,但未包含多语句分支,此规则可解决该问题,如在switch中允许多个语句的分支,避免使用旧技术;还能减少代码编写中的一些不便,如避免return关键字的添加,使if表达式更清晰,让do表达式更可行等。
    • 详细设计:函数返回非Void值时,最后一个表达式为隐含返回值;ifswitch表达式可执行多个语句后以表达式结束;do语句也成为表达式,有相应规则,如guard语句不建议使用隐式返回等。
    • 对现有代码的影响:大部分源兼容,仅在少数边缘情况(如闭包)可能导致源破坏,可通过backticks解决,建议在即将推出的功能标志下引入该特性。
    • 考虑的替代方案:多种替代方案被考虑,如像 Ruby 那样以最后一个表达式为值、Rust 的变体等,最终权衡后选择了无关键字的“最后表达式”规则,因为其更具一致性和可读性。
    • 源兼容性:在兼容性测试套件中发现罕见的边缘情况可能导致源破坏,但可通过backticks解决,且会回溯到早期编译器版本。
    • 对 ABI 稳定性的影响:无影响。
阅读 8
0 条评论