jdk1.8 函数式编程与scala函数式编程区别

今天和同事的一番对话,引起了我对java函数式编程和scala函数式编程的思考。

我:       java (x,y)->(x+y) x,y,的类型必须提前定义好吗? 不能说我(int x,long y)->x+y 
同事:如果你说的是函数式编程在java中的使用 则(x,y)->(x+y)必然是一个函数式接口的唯一的一个抽象方法
           那此时x,y的类型一定是确定的。他是使用流中的元素作为唯一固定的参数


我:    唯一固定的参数√明白了。java和scala的函数式编程有根本性的区别
同事:你说一下。函数式编程应该是固定的,不可能会出现你说的这种情况,有区别 概念本质是不会有偏差的
           有的只是方法的实现出现偏差。

我:scala是函数式编程语言,函数是一等公民。
        java 类和对象是一等公民
        scala里允许在流的内部定义参数
        而java 只能是list对象作为唯一参数去创建流

同事:这个 其实java 流是可以改变后面的参数的,map方法其实本质上就是在转化传输的流的元素类型。

我:    可以改变,但不可以另行定义。

函数式编程并不是Java新提出的概念,其与指令编程相比,强调函数的计算比指令的计算更重要;与过程化编程相比,其中函数的计算可以随时调用。

当然,大家应该都知道面向对象的特性(抽象、封装、继承、多态)。其实在Java8出现之前,我们关注的往往是某一类对象应该具有什么样的属性,当然这也是面向对象的核心--对数据进行抽象。但是java8出现以后,这一点开始出现变化,似乎在某种场景下,更加关注某一类共有的行为(这似乎与之前的接口有些类似),这也就是java8提出函数式编程的目的。
 

 

 

 

你可能感兴趣的:(scala,jdk1.8,函数式编程)