欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

Java 8和Scala对比

架构&设计模式 water 3291℃ 0评论

我们知道基于JVM的Scala是一种函数式语言,现在Java 8也推出了lambda等函数式功能,那么现在我们有了三种疑问:
1. Scala会不会替代Java?
2. Java会不会替代Scala
3. Java程序员是否有必要学习Scala?

对于这三个疑问,我的观点是:
1. Java 自身也在演化发展,轻言Scala会替代Java恐怕为时过早。
2. Scala和Java 8现在处于战略相持阶段,虽然Scala优势还比较明显,但是肯定不如Java 8出现之前了。
3. 掌握了Java 8等函数编程特点,会帮助你更容易学习Scala。

首先我们要对Scala进行精确定位,从某种程度上讲,Scala并不是一个纯粹的面向函数的编程语言,有人认为Scala是一个带有闭包的静态面向对象语言),更准确地说,Scala是面向函数与面向对象的混合,而Java 8以后的Java也可以算是一种面向对象+面向函数的混合了。

Scala主要特点是比Java更丰富的类型推断,不需要像Java那样死板地声明类型,这主要归结于Scala强大智能的编译器。类型推断的好处其实因人而异,太玄了可能会影响代码的可理解性。所以,Scala有时会出现编译时间比较长,因为机器自己理解代码也需要一点时间啊。

当然,Scala还有很多Java没有的功能:模式匹配 implicits、traits、macros 、currying等等,除了这些新特点不一定都是函数式编程核心功能以外,这些非常棒的语法对一般程序员可能还需要一个接受过程。

既然Scala设计的初衷是面向函数FP,而Java起家是面向对象OO,现在两者都是OO和FP的混合语言,是否可以这么认为:Scala = FP + OO,而Java = OO+ FP。

那么,Scala 与Java的PK就变成了“OO为主FP为辅”与“FP为主OO为辅”的PK了。

由于面向对象OO和面向函数FP两种范式是类似横坐标和纵坐标的两者不同坐标方向的思考方式,类似数据库和对象之间的不匹配阻抗关系,两者如果结合得不好恐怕就不会产生1+1>2的效果。

面向对象是最接近人类思维的方式,而面向函数是最接近计算机的思维方式。如果你想让计算机为人的业务建模服务,那么以OO为主;如果你希望让计算机能自己通过算法从大数据中自动建模,那么以FP为主。所以,Java可能还会在企业工程类软件中占主要市场,而Scala则会在科学计算大数据分析等领域抢占Java市场,比如Scala的Spark大有替代Java的Hadoop之趋势。

Scala另外还在Reactive Stream等异步流式编程中试图有所突破,总体来说,Scala面临Java 8及其后续版本的阻击,其函数编程的优势正在慢慢被蚕食,而Scala必须在一个新的领域能将Java一招致命,我个人比较看好以Scala的Akka框架为代表的方兴未艾的Reactive编程。

我之前说过,函数编程是让计算机更容易懂,而对于开发者则不易理解,函数编程在异步事件领域有其独特的效果,但是如何在非堵塞异步编程的可扩展性和代码可读性两个方面进行平衡,业界一直在不停探索。

其中在reactive这个领域不能不看看鼻祖Node.js的发展

转载请注明:学时网 » Java 8和Scala对比

喜欢 (1)or分享 (0)

您必须 登录 才能发表评论!