闭包
你应该听说过闭包的概念,它是另一个非常简单的函数式编程概念,它允许在一个函数中包括另一个函数,并可以在内部函数中引用外部变量,这种变量被称作“自由变量”,因为它们不是闭包的参数,也不是局部变量。
实际上,如果你阅读过有关JDK 7的文章,你会发现闭包一词的出现频率比Lambda表达式还要多,这是因为它俩通常是一起出现的,当Lambda表达式访问外部变量时,它就变成闭包,根据定义,闭包也是一种Lambda表达式。
高阶函数
高阶函数是指取得或返回另一个函数的函数,在本文开头的Python代码示例中,你应该已经看到了filter函数,它就是一个高阶函数,因为它的第一个参数是一个函数,这个函数用于测试列表(第二个参数)中每个元素的内容。
局部套用函数
局部套用函数最好解释为“链条式”Lambda表达式,对于一个可接受多个参数的函数,局部套用函数是函数转换的过程,以便每个参数都被传递给函数,然后根据原始的函数调用返回。
其它还不错的函数式编程概念
其它我认为还不错的函数式编程概念有:
◆列表解析 – 为在一行命令中生成列表(集,映射等)的语法装饰,如“List<String> l = (for x in someOtherCollection) { x.someMethod() && x.another(); }”
◆尾递归 – 在语句的末尾调用自己的函数,编译器(或运行时环境)可以识别它,因此代码可以得到明显的优化。
函数式编程有什么意义?
问得好,函数式编程的好处有许多,最明显的是整体代码量更少了,不用再为文件名过滤和比较等功能实现接口,你可以直接传递函数了。
小结
编程世界总是充斥着其它新时代的思想和传统,函数式编程只是其中一个优秀的软件开发方法,各有利弊,它可能会帮助你写出更好的软件。不管如何,我相信Lambda表达式项目一定可以完成,虽然它仍然存在缺陷,但它会给编程语言带来新鲜空气,也必将会受到开发者的欢迎。
原文作者:Alex Collins
原文名:Functional Programming Concepts in JDK 7