函数vs方法用于map,filter,reduce

时间:2017-03-30 01:54:09

标签: swift function methods functional-programming

一个人的优势是什么?

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

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

编辑:澄清“方法路线”的含义

这些语言的收藏集包含mapfilterreduce等方法,而不是将其作为单独的函数。

即,你会这样使用它:

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

1 个答案:

答案 0 :(得分:1)

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

但更重要的是,语言试图既面向对象又具有功能性。例如,Swift和Javascript,它们都有闭包,lambda,函数作为第一类对象,不变性等等。我认为oo语言和函数语言之间的边界将变得越来越模糊。甚至Java,许多人认为是面向对象最多的(Java支持的功能语言功能较少),现在有了lambda。

因此,语言的路径并不重要,因为使用哪种语言并不重要(有时它确实很重要,特别是对性能要求较高)。

我试着在这里评论我的想法,但显然,我超过了最大字符限制。这不是唯一的答案,但希望它有所帮助。