Java 语言中的函数编程
2009-11-12 00:00:00 来源:WEB开发网核心提示: 使用递归作为控制流程的机制,加强了引用透明性,Java 语言中的函数编程(2),没有副作用,我将重点放在在 Java 语言中使用闭包和高阶函数上,例如,Lisp 处理的列表定义为在头元素后面有子列表,但是首先对上面列出的所有特点做一个概述,闭包和高阶函数函数编程支持函数作为第一类对象
使用递归作为控制流程的机制。
加强了引用透明性。
没有副作用。
我将重点放在在 Java 语言中使用闭包和高阶函数上,但是首先对上面列出的所有特点做一个概述。
闭包和高阶函数
函数编程支持函数作为第一类对象,有时称为 闭包或者 仿函数(functor)对象。实质上,闭包是起函数的作用并可以像对象一样操作的对象。与此类似,FP 语言支持 高阶函数。高阶函数可以用另一个函数(间接地,用一个表达式) 作为其输入参数,在某些情况下,它甚至返回一个函数作为其输出参数。这两种结构结合在一起使得可以用优雅的方式进行模块化编程,这是使用 FP 的最大好处。
命令式编程
命令式编程这个名字是从自然语言(比如英语)的 祈使语气(imperative mood)衍生出来的,在这种语气中宣布命令并按照执行。除 Java 语言之外,C 和 C++ 是另外两种广泛使用的、符合命令式风格的高级编程语言。
懒惰计算
除了高阶函数和仿函数(或闭包)的概念,FP 还引入了 懒惰计算的概念。在懒惰计算中,表达式不是在绑定到变量时立即计算,而是在求值程序需要产生表达式的值时进行计算。延迟的计算使您可以编写可能潜在地生成无穷输出的函数。因为不会计算多于程序的其余部分所需要的值,所以不需要担心由无穷计算所导致的 out-of-memory 错误。一个懒惰计算的例子是生成无穷 Fibonacci 列表的函数,但是对 第 n 个Fibonacci 数的计算相当于只是从可能的无穷列表中提取一项。
递归
FP 还有一个特点是用递归做为控制流程的机制。例如,Lisp 处理的列表定义为在头元素后面有子列表,这种表示法使得它自己自然地对更小的子列表不断递归。
关于实现库
更多精彩
赞助商链接