我应该 return 对象本身只是为了功能链
Should I return the object itself just for function chain
我一直在想我是否应该从 setter 或过程(returning void
最初)return 对象本身,以便所有函数都可以连在一起。
我们都被教导要 return void
当没有什么可以 return 时,但是 return 对象本身比 returning void
?
当相关操作是变异操作时,您没有任何 'natural' return 值。这意味着您有机会 return 任何您想要的东西 - 例如对象本身。
在 OOP 中,如果您 return 对象本身,您将有效地启用 Fluent Interface. While this enables method chaining it also exposes you to aliasing 问题,因此这是否是一个净收益是一个悬而未决的问题。
在 FP 中,状态突变中断 referential transparency,因此设计良好的 FP API 根本不允许设置器或突变操作。相反,您将使用复制和更新,其中函数 return 是原始输入的副本,并进行了一些更改。这在 FP 中很常见,以至于像 F# 和 Haskell 这样的语言都有针对此类操作的特殊语法。
您可以在我的文章 Builder isomorphisms.
中看到所有三种样式(1. 突变,2. 流畅界面,3. 复制和更新)的比较和对比示例
我一直在想我是否应该从 setter 或过程(returning void
最初)return 对象本身,以便所有函数都可以连在一起。
我们都被教导要 return void
当没有什么可以 return 时,但是 return 对象本身比 returning void
?
当相关操作是变异操作时,您没有任何 'natural' return 值。这意味着您有机会 return 任何您想要的东西 - 例如对象本身。
在 OOP 中,如果您 return 对象本身,您将有效地启用 Fluent Interface. While this enables method chaining it also exposes you to aliasing 问题,因此这是否是一个净收益是一个悬而未决的问题。
在 FP 中,状态突变中断 referential transparency,因此设计良好的 FP API 根本不允许设置器或突变操作。相反,您将使用复制和更新,其中函数 return 是原始输入的副本,并进行了一些更改。这在 FP 中很常见,以至于像 F# 和 Haskell 这样的语言都有针对此类操作的特殊语法。
您可以在我的文章 Builder isomorphisms.
中看到所有三种样式(1. 突变,2. 流畅界面,3. 复制和更新)的比较和对比示例