关于Java8的Lamda表达式

最近几天看了函数式语言Lisp,对Java8的Lamda表达式有了进一步的理解。

首先,为什么叫做Lamda表达式呢?其实这个是函数式语言的叫法。函数式语言使用过程定义、以及过程定义的组合来完成需要的功能,可以这样讲:在函数式语言里面,过程定义和过程的组合是整个编程的主要内容。但是有些过程比较简单,为这些简单的东东定义一个过程比较啰嗦,所以引入了Lamda表达式这个语法。

如果给Lamda表达式起一个比较容易理解的名字,我认为应该叫做“匿名函数”:和函数的功能类似,但是没有名字而已。 不叫做匿名函数的原因是函数式语言的命名习惯而已。 因为函数式语言的基础是来源于lamda演算: http://en.wikipedia.org/wiki/Lambda_calculus。 这是函数式语言发展的基础。lamda演算和图灵机是等价的,内容比较复杂和难于理解,据我所知,可计算性领域会用到这些理论(反正我的智商暂时还无法理解这些东西)。

回到Java8,本质上还是将函数式语言的特性引入到对象式语言中来,但是我对此做法还是有些疑虑:
  1)对于函数式语言来说,函数本身是没有副作用的(函数执行的过程中只会对函数的局部变量产生影响),但是看Java8中的Lamda表达式其实并没有完全屏蔽函数的副作用(比如允许使用this来访问其他的函数等);
  2)由于函数式语言没有副作用,因此在多CPU的环境下可以提高并行(不是并发)度,但是在一般的对象式&过程式语言中是比较困难的(由于一般的过程执行期间可能会对非局部变量产生读写)。
基于以上2点,对官方文档提的提高并行度,我觉得只能是一定程度上的提高并行度(或者或提高比较困难,因为并不满足真正的函数式语言的特性),为什么不做的更彻底一些呢?

你可能感兴趣的:(java8)