【问题标题】:Should I return the object itself just for function chain我应该只为函数链返回对象本身吗
【发布时间】:2022-01-03 10:09:04
【问题描述】:

我一直在想是否应该从 setter 或过程中返回对象本身(最初返回 void),以便所有函数可以链接在一起。

我们都被教导在没有什么可以返回时返回 void,但是返回对象本身是否比返回 void 更好?

【问题讨论】:

  • 不同社区对此有不同的看法。在 Python 中,变异函数通常返回 None。 jQuery 生态系统尽可能返回this;在 Ruby 中,几乎从不返回 nil,除非函数显式这样做。这个问题没有客观答案。

标签: oop functional-programming coding-style function-composition


【解决方案1】:

当所讨论的操作是变异操作时,您没有任何“自然”返回值。这意味着您有机会返回您想要返回的任何内容 - 例如对象本身。

在 OOP 中,如果您返回对象本身,您将有效地启用 Fluent Interface。虽然这启用了方法链接,但它也会让您面临aliasing 问题,因此这是否是净收益是一个悬而未决的问题。

在 FP 中,状态突变会中断referential transparency,因此精心设计的 FP API 根本不允许设置器或突变操作。相反,您将使用复制和更新,其中函数返回原始输入的副本,并进行了一些更改。这在 FP 中很常见,以至于 F# 和 Haskell 等语言对此类操作都有特殊的语法。

您可以在我的文章Builder isomorphisms 中看到所有三种样式(1. 变异、2. 流畅界面、3. 复制和更新)的比较和对比。

【讨论】:

  • 感谢您回答这个问题。我发现了许多我从未听说过的概念。我一直在 C# 和 Go 中,对函数/方法和可变性的概念感到困惑。在阅读了这个答案并学习了 Haskell 之后,我变得更加清晰了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多