混合面向对象和函数式编程

Kai*_*Kai 29 functional-programming scala imperative-programming

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

使用这样的语言,我想象将所有状态更改隔离到单个代码部分,并使程序的其余部分纯粹功能.只是想到它让我流口水(调试天堂!).

到目前为止,我已经发现了Scala,虽然我刚刚听说过它(它看起来很神奇).在这种"混合风格"范式中是否有任何重要的竞争者?

Igo*_*kon 20

最着名的是OCamlF#(可以模糊地描述为OCaml for .NET).

还有许多其他多范式语言,如Oz,但它们主要具有教学价值.相比之下,OCaml非常实用.它几乎和C一样快,几乎和Haskell一样漂亮:)

像Python和Ruby这样流行的脚本语言也可以让你以功能的方式编程.但是,它们没有提供"经典"函数语言(以及OCaml)具有的最强大的功能之一:模式匹配(不要将其误认为正则表达式).

  • OCaml和F#当然几乎和Haskell语法一样漂亮,但它们不允许你抽象类型构造函数(没有更高级的类型).Scala并不是那么漂亮,但它确实给你带来了更多种类.如果你只是想编写更漂亮的代码,那很好,但是如果你想要更强大的抽象,那么Caml变种将无法让你在那里. (8认同)

Eva*_*her 20

Javascript:OO功能.


Zif*_*fre 12

此外,许多脚本语言(如Python,Ruby,Lua等)都具有此功能,但缺少函数语言的许多优良功能,如代数数据类型和模式匹配.


Ray*_*yne 9

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

大多数语言,如Ruby,混合了函数式编程,但很多人甚至都没有意识到这一点.我发现这样的语言在语法方面还有很多不足之处.


Gor*_*son 9

Haskell:纯粹的功能,几乎没有OO,但继续,潜水.:d

Scala:OO和FP的美妙组合,有可能在十年或二十年内超越Java作为JVM的主要语言.我喜欢它,因为它为java平台带来了函数式编程,这是非常需要恕我直言.

C#:对OO的真棒支持,以及获得更多功能(一流的功能,我们将看到.net 4带来的改进)

F#:.net语言专为功能而设计,而不是最初为OO设计的C#.

Python:非常适合OO,但根本不适合FP

Javascript:支持一流的功能,但不是专为Scala和F#设计的.仍然比python恕我直言略好.

为什么要混合OO和FP?作为踏脚石?

  • 为什么混合OO和FP? - 因为这就是我们的世界.有些方面很好地模仿了永恒的关系,其他方面需要生命周期和状态. (8认同)

Eug*_*ota 7

JavaScript,Python和Ruby可以这样使用,但Scala通过静态输入函数并在JVM下工作来提升一个档次.

  • 为什么有人会用Python来学习函数式编程?:\ (26认同)
  • Python是学习FP原理的好地方. (2认同)

Sco*_*ski 7

C#.这是必要的,它可以很方便,但也有很多功能特性.Lambdas,迭代器和LINQ都是有用的.

它可能对纯粹主义者没有多大吸引力,但它对我有用.

  • 我觉得它没有冒犯性(对任何人),但这吸引了一些"进攻性"选票; 我建议你重新说出最后一点.这是相当可悲的(不是斯科特,而是"冒犯"),因为这篇文章显然不是"冒犯性的".但我们有. (4认同)
  • 态度很好. (2认同)