两种特性
面向对象:Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。
函数编程:Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。
scala优缺点
优点:
- Scala有交互式命令行(REPL), 可以在上面快速的试各种语法和代码。
- 一致性: 尽管Scala融合了静态类型系统、面向对象、函数式编程等语言特性,但却很少能看出融合的痕迹。Scala是我见到融合最多语言特性而又不显得杂乱的编程语言之一。
- 类型安全:Scala创始人是教授,他先带领创建了Java 5编译器,而后觉得Java有太多羁绊而发明了Scala。 Scala编译器和类型系统非常强大,它的目标是尽量把软件错误消灭在编写过程中。 Scala类型系统是图灵完备的,甚至可以在编译期间解决问题。
- 面向对象: Scala是面向对象的编程语言,所有的变量和方法都封装在对象中,可以把信息封装起来供外部使用。
- 函数式编程:Scala同时又是函数式编程语言,函数可以独立存在,可以定义一个函数作为另一个函数的返回值,也可以接受函数作为函数的参数。这给组合函数带来了很大的便利。如何把面向对象编程形容成搭积木的话,函数式编程就像拼线条,更灵活和更有创意
- 异步编程: 由于函数式编程提倡变量不可变,使异步编程变得非常容易。同时Scala提供的Future, 和akka类库(和akka配合并发这块估计是难逢对手,并发编程基于消息传递机制,不用考虑线程等问题。),使得异步编程变得非常容易
- 基于JVM类java: Scala会被编译成为jvm bytecode,所以Scala能无缝集成已有的Java类库。你可以非常自然的使用已经存在的非常庞大且稳定的Java类库,比如小巧好用的apache.common.*, 或者Java上的各种工具类库。
- 类java,java程序员很容易上手。
- 大数据方向,Scala在Spark上可以很快做数据挖掘,效率非常高。
缺点:
- 编译笨重
- 国内文档较少,开发人员不像java,py,php等语言广泛,技术文档不全。
下一篇开讲“scala+akka”组合的并发模型的优劣对比,和go,java对比。
部分内容来之“知乎”,“维基百科”。