我从小就被java教过,在过去的几年里我使用流行的开源CMS开始学习很多PHP。我真的很喜欢OOP的自然感觉,但我最近发现了函数式编程的概念,这似乎是一种困难但优雅的做事方式。
在rtperson对问题" What is functional, declarative and imperative programming? [closed]"的完美回答中,他说"那么那就是面向对象的编程,这实际上只是一种在命令式计划中组织数据的新方法。"
我想我理解他的意思,但这是否真的如此? OOP可以与函数式编程共存吗?
答案 0 :(得分:1)
是的,有一个术语是“对象功能编程”。 基本上在这些语言中,函数是“一等公民” - 一个对象。
我想大多数人都同意,只是因为你必须了解所有概念 - 功能性,OO和命令性而不是那么容易实现。
此类语言的示例如下:
答案 1 :(得分:1)
是的,它是兼容的。您可以使用任何语言以功能方式进行编程。一个例子是Java String,它是不可变的,并且如果你改变诸如改变大小写等方法,则返回一个新对象。
如果您考虑它o.something(y)
只是osomething(o, y)
,如果您不改变o
或做其他与OO无关的副作用,那么它是有效的。
答案 2 :(得分:0)
是。有一种称为“功能对象”的东西,它基本上是一个对象,其中mutator方法返回一个具有修改状态的新对象,而不是改变对象的状态。 Clean将该想法与唯一性类型相结合,以使修改后的状态保持单线程,这允许编译器通过修改幕后对象的存储来实现方法。
此外,没有任何关于可变状态使其“不是纯粹的功能”;普通表达式评估会改变程序可见的状态,这是不纯的。因此,您可以通过使对象的方法返回IO monad(或任何其他有状态monad)中的操作来组合OO和纯函数式编程,这些操作会改变一组常见的基础状态(不可用于程序的其余部分)。