本文由 KnewHow 发表在 ScalaCool 团队博客。
去年我加入 水滴团队 ,面试中,面试官问:“你了解 Scala 吗?”
“不了解(尴尬)。”
“你知道 Spark 吗?它就是使用 Scala 编写的,不过在我们团队中,Scala 主要作为后端语言,我们 90% 以上的业务代码都是使用 Scala 编写。Scala 在国内使用的比较少,但是在国外用的还是蛮多的,如 Twitter 就是使用 Scala 写的后端。”
自那以后,我便开始了 Scala 的学习之旅。
Scala 是由德国的计算机科学家和编程方法教授 Martin Odersky 设计出来的,它的设计原理严格遵循数学的逻辑推理。因此它是一门优秀的编程语言,它不仅仅在工业界被广泛使用,在学术界也占用很高的研究地位。
由于之前的 Java 背景,我经常拿 Scala 与 Java 这两门语言比较。 Scala 和 Java 都基于 JVM,因此 Java 的类库,Scala 都可以直接使用。但是我对 Scala 印象最深的点,并不是「面向对象」,而是它还拥抱「函数式」,尤其是它的「高阶」。
如果我们把「面向对象」比作站在地面上观察事物的原理,并且使用这些原理解决问题,那么「高阶」就是让你站在山上去看待事物,对问题进行更高层次的抽象。
因此不管是解决实际问题,还是提高对编程语言的认知,Scala 都是一们值得学习的语言。
我是从《快学 Scala》这本书开始学习 Scala 的,受此书启发,我想能不能书写一个「从 Java 到 Scala 系列」,寻找一棵从 Java 通往 Scala 的连续的知识树,通过对知识树的讲解,来学习 Scala。
好了,这就是本系列的第一篇,那么我们如何谈起呢?
既然 Java 和 Scala 都是「面向对象」的,那我们就来探索一下什么是「面向对象」吧。
模板和对象
「模板」是在代码层面描述一类对象的「行为」或者「状态」的 代码 ,它是抽象的。如 Java 中的类,C 语言中的结构体,它们都是「模板」。
「对象」是在运行期间通过模板在内存中生成的一个个 实体 ,它是具体的。如 Java 在运行期间通过 new 在内存中产生的实体就叫做「对象」。
如果你说共享单车,那么它就是一个「模板」;如果你说这辆共享单车和那辆共享单车,那它们就是「对象」。
在代码层面,「对象」的行为可以定义为「方法」,「对象」的状态可以定义为「属性」,那我们如何去描述一类「对象」的方法或者属性呢?- 封装 。