您的位置:首页 > 其它

Scala的简介

2017-12-04 22:30 288 查看


Scala 简介 优点 及 用途

Scala 是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库互联互通。它既支持面向对象的编程方式,又支持函数式编程。它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。Scala 就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。


优势:

个人觉得比较运行速度其实没啥意义, 因为两种语言都是生成 JVM 的字节码, 依赖 JVM 这个虚拟平台来跑代码. 除非 Scalac (scala的编译器) 有重大 bug, 生成的字节码执行让人无法接受, 否则基本上不会相差太多. 再说, scala 都到大版本2了, 这种概率实在是不大.

相比较与 Java, 在下觉得 Scala 最主要的有以下两点优势:

FP 泛型支持

如果用多了 Spring 中大量的 template 接口, 你就会觉得 FP 其实还是蛮好用的.

而这仅仅是 FP 好处的冰山一角.

函数其实就是一个 
input -> output
 (scala 也是这么表示一个函数的), 没有任何副作用,
与状态无关, 由于这种特性, 所以函数式的编程范式在分布式领域有很多好处

对于函数式编程,我的知识实在是皮毛, 但可以这么说, FP 相对与 OO 有哪些优势, Scala 对于 Java 差不多就有哪些优势.

正因为 FP 有如此多的优势, 所以 Java8 才引入了 FP. 从某种程度上来说, Java 认可了 Scala 的做法.

类型系统支持

如果说 Java 是一种类型安全的语言, 那么毫无疑问, Scala 的类型更加安全, 从某种程度上说, Scala 的类型是图灵完备的, 而 Java 不是. 我的一位好朋友在这方面研究的比较深( http://hongjiang.info/scala/ ),
而我对与 Scala 的类型系统的理解, 也还是皮毛.

正是以上这两点大优势, 造成了 Scala 比 Java 更加安全, 同时又具备灵活性, 想象力.

其他语言层面上的优势

在 Java 中, 你是否有时很想继承多个 
AbstractClass
 呢? 对不起, Java
只支持单继承

在 Scala 中, 你可以进行 mixin (Java 8 也开始引入 default method 了呢)

在 Java 中, 想要一个 singleton ? 要么在 static block 中做, 要么利用 Enum 的单例特性完成, 或者其他更纠结的方法.

在 Scala 中, 只要声明为 
object
, 即为单例.

在 Java 中, 想要延迟加载一个单例? 
double check


在 Scala 中, 只要在 
object
 中将变量修饰为 
lazy
 即可

在 Java 中, 想要对集合进行一些操作? 使用一层一层的 for 循环吧

在 Scala 中, 使用 collection 的一些集合操作, 即可获得如写
SQL
般的享受.

在 Java 中, 在并发中想对
Future
进行回调? 对不起, 
Future
 不是
Listenable (无法支持回调), 除非你使用额外的工具(如 guava, spring)

在 Scala 中, 本来就主张异步编程, future 和 promise 的配合让人非常愉快.

在 Java 中, 要透明扩展一个第三方库的类怎么办? 包装, 再加一层.

在 Scala 中, 有强大的 implicit 机制让你更优雅的做到这一点, 同时还能保证类型安全(比起 Ruby 的 monkey patch, 要安全得多)

Scala 的表达力很强, 相同功能的代码, 用 Java 和 Scala 的行数不可同日而语.

这些单单是语言层面上的优势, 除此之外, Scala 还能无缝结合 Java

尽管罗列了如此多的好处, 但 Scala 有如下劣势:
语法复杂, 学习曲线非常高
国内 Scala 程序员很难找 (目前 Scala 的影响力也在缓慢扩大, 比如 Scala 社区中的明星 Spark 的流行也在慢慢拉动 Scala 的流行, 如同 rails 之于 ruby)
社区, 生态还比较小, Scala 风格的库还非常少(但可以和 Java 很容易的斜街很多时候弥补了这一点)


与java 差别

相对于Java而言,Scala的代码更为精简(减低犯错),而且功能更为广泛(Scala其实是Scalable Language 的简称,意为可扩展的语言),许多Scala的特性和语法都是针对Java的不足和弱点来设计的。

Scala的特点是有很多函数程式语言的特性(例如ML,Miranda, Scheme,Haskell),譬如惰性求值,list comprehension, type inference, anonymous function, pattern matching 等等,同时也包含 Object-Oriented 的特性(OO 能与 FP 混合使用是 Scala 的亮点)。此外,许多相似于高级编程语言的语法也渗入其中(例如 Python),不仅提高了 Scala 代码的可读性,维护、修改起来也较为省时省力。

Scala 与 Java 语法上的明显差异有:
不需要分号结尾
类型定义开头需大写(与 Haskell 相同)
函数定义需 
def
 开头(与
Python、Ruby 相同)
return
 可以省略

在此值得提醒的是,统计显示,Scala 的代码运行速率仅为 Java 的 8 成。


用途

spark 是用scala 开发的,可以做大数据,web等,其他功能 和java差不多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: