混合面向对象和功能的编程(Mixing object-oriented and functional

2019-06-23 14:52发布

哪些语言是促进双方面向对象和函数式编程? 我知道,支持一流的功能,任何语言都可以被认为是功能性的,但是我正在寻找具体定位两种编码风格语法。

使用这样的语言,我想象隔离所有的状态变化到一个单一的代码部分和具有该程序的其余部分是纯粹的功能。 一想到它让我流口水(调试天堂!)。

到目前为止,我发现斯卡拉虽然我才刚刚听说过它(和它看起来令人惊讶)。 是否有这种“混合式”的模式有什么大的竞争者?

Answer 1:

最著名的是OCaml的和F# (其可被隐约描述为OCaml的用于.NET)。

还有许多其他的多范式语言,如奥兹 ,但他们大多是教育价值。 相比之下,OCaml中是非常实用的。 这几乎一样快,C和几乎一样美丽哈斯克尔:)

流行的脚本语言如Python和Ruby让你在实用的风格编程为好。 然而,他们不提供最强的设施,“经典”功能性语言(以及OCaml的)有一个: 模式匹配 (不要误以为是正则表达式)。



Answer 2:

使用Javascript: OO和功能 。



Answer 3:

  • OCaml的
  • O'Haskell (和面向对象的编程是有些可能的,即使在正常的Haskell )
  • Nemerle
  • 可能newLISP

此外,许多脚本语言如Python和Ruby,Lua中,等有这个能力,但是缺少许多功能性语言的很好的特性,如代数数据类型和模式匹配。



Answer 4:

ocaml的和F#是最流行的语言是混合OOP和FP,据我所知。

大多数语言,像Ruby,混合函数式编程,但很多人甚至不知道它。 我觉得这样的语言留下要在语法前,这样的期望很多。



Answer 5:

哈斯克尔 :纯功能性的,几乎没有面向对象的,但前进,将潜水。 :d

斯卡拉 :OO和FP的美丽组合,可能可能超越Java作为首要的语言的JVM在十年我喜欢它,因为它带来了函数式编程的Java平台,东西是非常需要恕我直言。

C#中 :为OO真棒支持,以及获得更多的功能(第一类函数,我们就会看到什么样的改进.NET 4带来的)

F#:.NET语言中内置有功能明确,而不是C#,它的初衷是为面向对象的东西。

Python的 :伟大的OO,但并不适合于FP

使用Javascript:支持一流的功能,但并不是专门为FP像Scala和F#的设计。 仍比蟒蛇恕我直言略胜一筹。

你为什么想混OO和FP? 作为一个敲门砖?



Answer 6:

C#。 这是必要的,它可以很方便,但也有很多的功能特性。 Lambda表达式,迭代器和LINQ是所有的功能。

它可能不会吸引太多的纯粹主义者,但它为我工作。



Answer 7:

的JavaScript,Python和Ruby可以使用这种方式,但斯卡拉由静态输入功能和JVM下工作颠簸了一个档次。



Answer 8:

你真的问错了问题。 你的问题的前提是有被“OO”和“功能性”节目之间的区别。 这种区别是不感兴趣或相关。 事实上,根据“支持头等函数”的准则,即使Java是功能性 。

但是你击中了要害与“纯粹的功能”。 这就是有趣的一点。 什么语言为您提供引用透明和纯洁这样呢? 那么,他们中的大多数,如果你很小心。 但没有多少人真正保证你的函数都是纯。 我只能想到一对夫妇,提供你的语言。

其中之一是哈斯克尔 。 在Haskell,你写的是纯粹的功能从开始到结束程序。 副作用都委托给称为IO的数据结构,并且状态被通过使其通过纯函数或在单​​子包封它处理。 所以,你有你的“调试天堂”只有你的代码的一小部分与全局状态交互和你的程序的其余部分是纯粹的,和纯度是由语言执行。



Answer 9:

只要你坚持不“纯洁”,Common Lisp的支持您的所有需求。



Answer 10:

我不知道为什么你正在寻找一个专门鼓励混合起来,而不是仅仅与做函数式编程和面向对象的编程语言做也无妨一门语言? 它可以很容易地接触到Python和Ruby,Perl或类似的解释语言的效果。 另外基于C的面向对象的语言往往混合使用面向对象的特性纯C,例如目标C可以很容易地以这样的方式,你应该选择被写入。

编辑:我已经意识到我是不正确的,我在这里留下这个答案柜面有人可以从我的错误中学习 - 见注释。



Answer 11:

Python和JavaScript的,Common Lisp的,红宝石,Smalltalk中,哈斯克尔,OCaml的和,从我的头顶。 这不是一个真正的异国组合。



Answer 12:

红宝石! 在Ruby中,一切都是对象(甚至是文字),并且它还具有全功能的编程支持。



文章来源: Mixing object-oriented and functional programming