【问题标题】:Function vs Method for map, filter, reducemap、filter、reduce的函数vs方法
【发布时间】:2017-08-23 17:53:32
【问题描述】:

两者相比有什么优势?

为什么像 Swift 和 JavaScript 这样的语言决定采用方法路线?

我知道我可以像 Haskell 那样做,并且只有带有运算符的函数才能使其像方法一样可读(链接时),那么为什么这些语言与方法一起使用?

编辑:澄清我所说的“方法路线”的意思

这些语言中的集合具有mapfilterreduce 等方法,而不是将它们作为单独的函数。

也就是说,你会这样使用它:

[1, 2, 3].map(...) 而不是map(...)([1, 2, 3])

【问题讨论】:

  • 不太清楚你所说的方法路线是什么意思。 Swift 和 JavaScript 不支持方法以外的功能吗?
  • 已添加说明。
  • 第一个例子它实际上是如何在swift中完成的
  • @LeoDabus 正是,这就是我说为什么使用方法而不是函数时的意思。
  • 你的问题是基于意见的

标签: swift function methods functional-programming


【解决方案1】:

我认为原因之一可能是 Swift 和 JavaScript 等语言是面向对象的语言。并且对象有方法,否则根本没有理由使用对象。像 Haskell 这样的语言是函数式编程语言,它们对对象的依赖较少(其中一些根本没有对象,比如 clojure)。所以问题是为什么其中一些是 OO 语言,而另一些是函数式编程语言。我认为是因为 OO 语言和函数式编程语言都有其优点。就像在 OO 语言中一样,您可以实现good design principle。函数式编程语言非常适合multi-threading problems。所以有人选择这条路线,有人选择另一条路线。

但更重要的是,语言正试图同时面向对象和函数式。比如 Swift 和 Javascript,它们都有闭包、lambda、functions-as-first-class-object、immutability 等。我认为 oo 语言和函数式语言之间的界限会越来越模糊。甚至许多人认为是最面向对象的 Java 之一(Java 支持的函数式语言特性较少),现在也有 lambda。

因此,一种语言走哪条路线并不重要,因为你使用哪种语言并不重要(有时它确实很重要,尤其是对性能要求更高的语言)。

我尝试在这里评论我的想法,但很明显,我超出了最大字符数限制。这不是唯一的答案,但希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2020-11-25
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多