Java语言中的函数编程[Java编程]
本文“Java语言中的函数编程[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Java 语言中常被轻忽的一个方面是它被归类为一种号令式(imperative)编程语言.号令式编程固然由于与 Java 语言的关联而相当遍及,但是并非惟一可用的编程气势,也不老是最有效的.在本文中,我将探究在 Java 开辟实践中加入差别的编程办法 ── 即函数编程(FP).
号令式编程是一种用程序状况描写计算的办法.利用这种范型的编程人员用语句改变程序状况.这就是为什么,像 Java 这样的程序是由一系列让计算机履行的号令 (大概语句) 所构成的.另一方面, 函数编程是一种夸大表达式的计算而非号令的履行的一种编程气势.表达式是用函数结合基本值构成的,它近似于用参数调用函数.
本文将介绍函数编程的基本特点,但是重点放在两个分外实用于 Java 开辟框架的元素:闭包和高阶函数.假如您曾经利用过像 Python、Ruby 大概 Groovy 这样的矫捷开辟语言,那么您便大概已经碰到过这些元素.在这里,您将看到在 Java 开辟框架中直接利用它们会呈现什么情形.我将首先对函数编程及其核心元素做一个简短的、概念性的综述,然后用常用的编程场景展示,用构造化的方法利用闭包和高阶函数会给 Java 代码带来什么好处.
什么是函数编程?
在常常被引用的论文 “Why Functional Programming Matters”中,作者 John Hughes 阐明了模块化是成功编程的关键,而函数编程可以极大地改良模块化.在函数编程中,编程人员有一个自然框架用来开辟更小的、更简单的和更普通化的模块, 然后将它们组合在一同.函数编程的一些基本特点包含:
支持闭包和高阶函数.
支持怠惰计算(lazy evaluation).
利用递归作为掌握流程的机制.
加强了引用透明性.
没有副作用.
我将重点放在在 Java 语言中利用闭包和高阶函数上,但是首先对上面列出的全部特点做一个概述.
闭包和高阶函数
函数编程支持函数作为第一类对象,有时称为 闭包大概 仿函数(functor)对象.实质上,闭包是起函数的作用并可以像对象一样操作的对象.与此近似,FP 语言支持 高阶函数.高阶函数可以用另一个函数(间接地,用一个表达式) 作为其输入参数,在某些情形下,它乃至返回一个函数作为其输出参数.这两种构造结合在一同使得可以用文雅的方法举行模块化编程,这是利用 FP 的最大好处.
号令式编程
号令式编程这个名字是从自然语言(比方英语)的 祈使语气(imperative mood)衍生出来的,在这种语气中公布号令并按照履行.除 Java 语言之外,C 和 C++ 是别的两种遍及利用的、符合号令式气势的高级编程语言.
怠惰计算
除了高阶函数和仿函数(或闭包)的概念,FP 还引入了 怠惰计算的概念.在怠惰计算中,表达式不是在绑定到变量时当即计算,而是在求值程序需求产生表达式的值时举行计算.耽误的计算使您可以编写大概潜在地生成无穷输出的函数.因为不会计算多于程序的别的部份所需求的值,所以不需求耽忧由无穷计算所招致的 out-of-memory 错误.一个怠惰计算的例子是生成无穷 Fibonacci 列表的函数,但是对 第 n 个Fibonacci 数的计算相当于只是从大概的无穷列表中提取一项.
递归
FP 还有一个特点是用递归做为掌握流程的机制.比方,Lisp 处理的列表定义为在头元素背面有子列表,这种表示法使得它自己自然地对更小的子列表不断递归.
关于实现库
我利用了由 Apache Commons Functor 项目供应的库构建本文利用的例子.Apache Commons Functor 库包含大量基本构造,可以在触及闭包和高阶函数的复杂利用场景中反复利用.当然,可以利用差别的实现(如 Java Generic Libraries、Mango 大概 Generic Algorithms for Java),而不会对在本文中所谈论和展示的概念有影响,固然您必须下载和利用 Apache Commons Functor 库才能演示这里的例子.
以上是“Java语言中的函数编程[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |