有哪些语言可以促进面向对象和函数式编程?我知道任何支持一流功能的语言都可以被认为是功能性的,但我正在寻找一种专门针对两种编码风格的语法.
使用这样的语言,我想象将所有状态更改隔离到单个代码部分,并使程序的其余部分纯粹功能.只是想到它让我流口水(调试天堂!).
到目前为止,我已经发现了Scala,虽然我刚刚听说过它(它看起来很神奇).在这种"混合风格"范式中是否有任何重要的竞争者?
最着名的是OCaml和F#(可以模糊地描述为OCaml for .NET).
还有许多其他多范式语言,如Oz,但它们主要具有教学价值.相比之下,OCaml非常实用.它几乎和C一样快,几乎和Haskell一样漂亮:)
像Python和Ruby这样流行的脚本语言也可以让你以功能的方式编程.但是,它们没有提供"经典"函数语言(以及OCaml)具有的最强大的功能之一:模式匹配(不要将其误认为正则表达式).
Javascript:OO和功能.
OCaml的
O'Haskell(面向对象编程甚至可以在普通的Haskell中使用)
Nemerle
可能是新的LISP
此外,许多脚本语言(如Python,Ruby,Lua等)都具有此功能,但缺少函数语言的许多优良功能,如代数数据类型和模式匹配.
据我所知,OCaml和F#是最流行的混合OOP和FP的语言.
大多数语言,如Ruby,混合了函数式编程,但很多人甚至都没有意识到这一点.我发现这样的语言在语法方面还有很多不足之处.
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?作为踏脚石?
JavaScript,Python和Ruby可以这样使用,但Scala通过静态输入函数并在JVM下工作来提升一个档次.
C#.这是必要的,它可以很方便,但也有很多功能特性.Lambdas,迭代器和LINQ都是有用的.
它可能对纯粹主义者没有多大吸引力,但它对我有用.