|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
关于“Java8为Java带来了函数式编程”已有了良多会商,但这句话的真正意义是甚么?
本文将会商函数式,它对一种言语或编程体例意味着甚么。在回覆“Java8的函数式编程怎样”之前,我们先看看Java的演化,出格是它的范例体系,我们将看到Java8的新特征,出格是Lambda表达式怎样改动Java的光景,并供应函数式编程作风的次要上风。
函数式编程言语是甚么?
函数式编程言语的中心是它以处置数据的体例处置代码。这意味着函数应当是第一品级(First-class)的值,而且可以被赋值给变量,传送给函数等等。
现实上,良多函数式言语比这走得更远,将盘算和算法看得比它们操纵的数据更主要。个中有些言语想分别程序形态和函数(以一种看起来有点对峙的体例,利用面向对象的言语,这一般会将它们接洽得更严密)。
Clojure编程言语就是一个如许的例子,只管它运转于基于类的Java假造机,Clojure的实质是函数式言语,而且在初级言语源程序中不间接发布类和对象(只管供应了与Java优秀的互操纵性)。
上面显现的是一个Clojure函数,用于处置日记,是一等国民(First-classcitizen),而且不必要绑定一个类而存在。- (defnbuild-map-http-entries[log-file]
- (group-by:uri(scan-log-for-http-entrieslog-file)))
复制代码 当写在函数中的程序,对给定的输出(不管程序中的别的形态怎样)老是前往不异的输入,而且不会发生别的影响,大概改动任何程序形态,这时候候函数式编程是最有效的。它们的举动与数学函数不异,偶然候把遵守这个尺度的函数称为“纯”函数。
纯函数的伟大优点是它们更简单推论,由于它们的操纵不依附于内部形态。函数可以很简单地分离在一同,这在开辟者事情流作风中很罕见,比方Lisp方言和别的具有强函数传统的言语中很广泛的REPL(Read,Execute,Print,Loop)作风。
非函数式编程言语中的函数式编程
一种言语是否是函数式并非非此即彼的形态,实践上,言语存在于图谱上。在最末了,基础上是强迫函数式编程,一般克制可变的数据布局。Clojure就是一种不承受可变数据的言语。
不外,也有一些别的言语,一般以函数体例编程,但言语其实不强迫这一点。Scala就是一个例子,它混和了面向对象和函数式言语。同意函数作为值,比方:同时保存与Java十分靠近的类和对象语法。
另外一个极度,固然,利用完整非函数式言语举行函数式编程是大概的,比方C言语,只需保持好符合的程序员原则和常规。
思索到这一点,函数式编程应当被看做是有两个要素的函数,个中一个与编程言语相干,另外一个是用该言语编写的程序:
1)底层编程言语在多年夜水平上撑持,大概强迫函数式编程?
2)这个特定的程序怎样利用言语供应的函数式特征?它是不是制止了非函数式特征,比方可变形态?
<p>
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。 |
|