函数式编程是否使用对象数据结构?

Jus*_*non 5 javascript functional-programming prototype

我一直在进行大量关于函数式编程的研究,我非常喜欢将代码视为函数的想法.我没有真正喘气的事情,似乎没有直接询问似乎没有得到明确的答案是:

  • 函数式编程使用对象吗?
  • 它是否像原型继承?

如果没有,那么如何构建数据呢?

一个例子可能是:

let dragons = { 
    name : "default",
    age : 0,
    element : "fire"
}
let fireDragonJoe = Object.create(dragons);
fireDragonJoe.name = "Joe";
fireDragonJoe.age = 3009;
Run Code Online (Sandbox Code Playgroud)

也许我只是在思考这一切,答案就是超级简单.如果有人知道一个好的参考资料,它实际上教会了函数式编程的原因和方法,最好是对Javascript来说很棒.

Edw*_*rzo 11

许多函数式编程语言都使用对象.

几个例子:

关键是面向对象和功能定位不是相互排斥的概念.

在当今,越来越多的面向对象语言包含了函数式编程概念.例如,C#Java在对对象的第一类支持之上支持功能类型.

因此,我会说原型继承没有任何东西阻止语言支持函数式编程功能,反之亦然.

现在,对象不是您可以使用的唯一数据结构.在面向对象编程中存在没有对象概念的语言,因此您使用其他机制来定义复杂类型和数据结构.

例如,在SML中,您可以定义元组,记录或其他形式的抽象数据类型.Haskell支持所有这些以及更多,例如代数数据类型和类型类.Clojure支持一系列其他数据类型,如记录,协议等.大多数函数式语言都强大支持列表,映射和其他基本集合以及复合数据类型.

所以那里还有很多其他的选择.你只需要出去玩其他一些非面向对象的语言就可以找到它们.

功能编程资源

有太多的资源来学习函数式编程.我当然可以向你推荐一些我的最爱,但我很确定有人会告诉你一些完全不同的东西.您必须开始尝试才能找到自己的路径.

这些是我过去用来学习FP的一些资源.

  • 功能性JavaScript:一本很棒的书,可以帮助你很多,因为你已经在使用JavaScript了.它的第9章:"发现如何在不使用类的情况下编写代码",似乎就是您正在寻找的东西.
  • 学习Haskell的好处:在我的情况下,当我开始使用函数式编程时,我更喜欢使用一种不允许我使用面向对象特性的语言,我想使用一种语言来强迫我思考功能性这就是为什么我开始使用一些Haskell和这本很棒的书.
  • 编程语言:Coursera的一个宏伟的课程.当我接受它的时候,这是一个学期的课程,但是这些天他们已经将它分成了多个课程.本课程涵盖了SML和Racket和Ruby中的基本功能编程概念.因此,您希望实现的目标是完美的组合:了解FP和OO之间的差异.
  • Scala中的函数式编程原则:也是Coursera的一个很好的课程.
  • 功能编程简介 edx.org的一门课程,涵盖了使用Haskell的FP基础知识.
  • C#中的函数式编程是我在那里找到的最好的书之一.

  • @JustinGagnon即使你坚持使用JavaScript,你也有很多选择,例如你在[Elm](http://elm-lang.org)中创建程序并将它们转换为JavaScript.这些天你甚至还有其他选择,例如[Kotlin](https://kotlinlang.org).甚至这些可能会使用今天的JavaScript提供的功能编程功能.正如我在回答中所说,我看不出你在哪里看到原型和函数式编程之间的冲突.老实说,我仍然没有得到你问题的这一部分所以我不确定我无法帮助你. (2认同)