WEB开发网
开发学院软件开发Java Java 语言中的函数编程 阅读

Java 语言中的函数编程

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: 创建闭包广意地说,有两种生成闭包的技术,Java 语言中的函数编程(5),使用闭包的代码可以等效地使用这两种技术,创建闭包后,通过 特化(specializing) 一个称为 BinaryPredicate 的接口做到这一点,这个接口是由 Apache Functor 库提供的,可以以统一的方式

创建闭包

广意地说,有两种生成闭包的技术,使用闭包的代码可以等效地使用这两种技术。创建闭包后,可以以统一的方式传递它,也可以向它发送消息以让它执行其封装的逻辑。因此,技术的选择是偏好的问题,在某些情况下也与环境有关。

在第一种技术 表达式特化(expression specialization)中,由基础设施为闭包提供一个一般性的接口,通过编写这个接口的特定实现创建具体的闭包。在第二种技术 表达式合成(expression composition) 中,基础设施提供实现了基本一元/二元/三元/.../n 元操作(比如一元操作符 not 和二元操作符 and / or )的具体帮助类。在这里,新的闭包由这些基本构建块的任意组合创建而成。

我将在下面的几节中详细讨论这两种技术。

表达式特化

假定您在编写一个在线商店的应用程序。商店中可提供的商品用类 SETLItem 表示。每一件商品都有相关的标签价格, SETLItem 类提供了名为 getPrice 的方法,对商品实例调用这个方法时,会返回该商品的标签价格。

如何检查 item1 的成本是否不低于 item2 呢?在 Java 语言中,一般要编写一个像这样的表达式:

assert(item1.getPrice() >= item2.getPrice()); 

像这样的表达式称为 二元谓词(binary predicate), 二元是因为它取两个参数,而 谓词 是因为它用这两个参数做一些事情并生成布尔结果。不过要注意,只能在执行流程中执行上面的表达式,它的输出取决于 item1 和 item2 在特定瞬间的值。从函数编程的角度看,这个表达式还不是一般性的逻辑,就是说,它不能不管执行控制的当前位置而随心所欲地传递并执行。

为了使二元谓词发挥作用,必须将它封装到一个对象中,通过 特化(specializing) 一个称为 BinaryPredicate 的接口做到这一点,这个接口是由 Apache Functor 库提供的,如清单 2 所示。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Java 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接