浅谈java8的函数式编程-编程小技巧

浅谈java8的函数式编程-编程小技巧

ID:30873939

大小:74.50 KB

页数:7页

时间:2019-01-03

浅谈java8的函数式编程-编程小技巧_第1页
浅谈java8的函数式编程-编程小技巧_第2页
浅谈java8的函数式编程-编程小技巧_第3页
浅谈java8的函数式编程-编程小技巧_第4页
浅谈java8的函数式编程-编程小技巧_第5页
资源描述:

《浅谈java8的函数式编程-编程小技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、浅谈Java8的函数式编程关于feldquo;Java8为Java带來了函数式编程”已经有了很多讨论,但这句话的真正意义是什么?本文将讨论函数式,它对一种语言或编程方式意味着什么。在回答“Java8的函数式编程怎么样”ZMj,我们先看看Jav且的演变,特别是它的类型系统,我们将看到Java8的新特性,特别是Lambda表达式如何改变Java的风景,并提供函数式编程风格的主要优势。J1函数式编程语言是什么?函数式编程语言的核心是它以处理数据的方式处理代码。这意味着函数应该是第一等级(First-class)的值,并冃能够被赋值给变量,传递给函数等等。

2、事实上,很多函数式语言比这走得更远,将计算和算法看得比它们操作的数据更重要。其屮有些语言想分离程序状态和函数(以一种看起来有点对立的方式,使用面向对象的语言,这通常会将它们联系得更紧密)。Clojurc编程语言就是一个这样的例子,尽管它运行于基于类的Java虚拟机,Clojure的本质是函数式语言,并且在高级语言源程序屮不直接公布类和对象(尽管提供了与Java良好的互操作性)。下面显示的是一个Clojure函数,用于处理日志,是一等公民(First-classcitizen),并且不需要绑定一个类而存在。(dcfnbuild-map-http-entrics[log-file]当写在

3、函数中的程序,对给定的输入(不论程序中的其它状态如何)总是返回相同的输岀,并H不会产生其它影响,或者改变任何程序状态,这吋候函数式编程是最有用的。它们的行为与数学函数相同,有时候把遵循这个标准的函数称为“纯”函数。纯函数的巨大好处是它们更容易推论,因为它们的操作不依赖于外部状态。函数能够很容易地结合在一起,这在开发者工作流风格中很常见,例如Lisp方言和其它具有强函数传统的语言屮很普遍的REPL(Read,Execute,Print,Loop)风格。非函数式编程语言中的函数式编程一种语言是不是函数式并不是非此即彼的状态,实际上,语言存在于图谱上。在最末端,基木

4、上是强制函数式编程,通常禁止可变的数据结构。Clojure就是一种不接受可变数据的语言。不过,也有一些其它语言,通常以函数方式编程,但语言并不强制这一点。Scala就是一个例了,它混和了面向对象和函数式语言。允许函数作为值,例如:valsqFn二(x:Int)=>x*x同时保留与Java非常接近的类和对象语法。另一个极端,当然,使用完全非函数式语言进行函数式编程是可能的,例如C语言,只要维持好合适的程序员准则和惯例。考虑到这一点,函数式编程应该被看作是有两个因素的函数,其中一个与编程语言相关,另一个是用该语言编写的程序:1)底层编程语言在多大程度上支持,或者强制函数式编程?2)这个特

5、定的程序如何使用语言提供的函数式特性?它是否避免了非函数式特性,例如可变状态?Java的一些历史Java是一种固执己见的语言,它具有很好的可读性,初级程序员很容易上手,具有长期稳定性和可支持性。但这些设计决定也付出了一定的代价:冗长的代码,类型系统与其它语言相比显得缺乏弹性。然而,J3V3的类型系统已经在演化,虽然在语言的历史当中相对比较慢。我们来看看这些年来它的一些形式。Java最初的类型系统Java最初的类型系统至今已经超过15年了。它简单而清晰,类型包括引用类型和基木类型。类、接口或者数组属于引用类型。•类是Java平台的核心,类是Java平台将会加载、或链接的功能的基本单位,

6、所有要执行的代码都必须驻留于一个类中。•接口不能直接实例化,而是要通过一个实现了接口API的类。•数组可以包含基本类型、类的实例或者其它数组。•基木类型全部由平台定义,程序员不能定义新的基木类型。从最早开始,Java的类型系统一直坚持很重要的一点,每一种类型都必须有一个可以被引用的名字。这被称为“标明类型(Nominativetyping)Srdquo;,Java是一种强标明类型语言。即使是所谓的&1dquo;匿名内部类ferdquo;也仍然有类型,程序员必须能引用它们,才能实现那些接口类型:Runnabler二newRunnable(){publicvoidrun(){

7、System,out.print!n("HelloWorld!");}};换种说法,Java屮的每个值要么是基本类型,要么是某个类的实例。命名类型(NamedType)的其它选择其它语言没有这么迷恋命名类型。例如,Java没有这样的Scala概念,一个实现(特定签名的)特定方法的类型。在Scala中,可以这样写:x:{defbar:String}记住,Scala在右侧标示变量类型(冒号后面),所以这读起來像是“x是-一种类型,它有一个方法bar

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。