Scala 教程

Scala这个名字是 Scalable Language(可扩展语言)的缩写,这个词很贴切的表达了他的意图。Martin Odersky教授和他的团队在2003年创作了这门编程语言。用来为jvm 函数式编程和面向对象编程来提供一个高性能的开发环境。

scala-spiral.png

1.scala介绍 —— 一个属于聪明人的编程语言

Scala 是一门满足现代软件工程师需求的语言;它是一门静态类型语言,支持混合范式;它也是一门运行在JVM 之上的语言,语法简洁、优雅、灵活。Scala 拥有一套复杂的类型系统,Scala 方言既能用于编写简短的解释脚本,也能用于构建大型复杂系统。这些只是它的一部分特性,下面我们来详细说明。


1.1 运行在JVM 和JavaScript 之上的语言

Scala 不仅利用了JVM 的高性能以及最优化性,Java 丰富的工具及类库生态系统也为其所用。不过Scala 并不是只能运行在JVM 之上! Scala.js(http://www.scala-js.org)正在尝试将其迁移到JavaScript 世界。


1.2 静态类型

在Scala 语言中,静态类型(static typing)是构建健壮应用系统的一个工具。Scala 修正了Java 类型系统中的一些缺陷,此外通过类型推演(type inference)也免除了大量的冗余代码。


1.3 混合式编程范式——面向对象编程

Scala 完全支持面向对象编程(OOP)。Scala 引入特征(trait)改进了Java 的对象模型。trait 能通过使用混合结构(mixin composition)简洁地实现新的类型。在Scala 中,一切都是对象,即使是数值类型。


1.4 混合式编程范式——函数式编程

Scala 完全支持函数式编程(FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。使用不可变值、被视为一等公民的函数、无副作用的函数、高阶函数以及函数集合,有助于编写出简洁、强大而又正确的代码。


1.5 复杂的类型系统

Scala 对Java 类型系统进行了扩展,提供了更灵活的泛型以及一些有助于提高代码正确性的改进。通过使用类型推演,Scala 编写的代码能够和动态类型语言编写的代码一样精简。


1.6 简洁、优雅、灵活的语法

使用Scala 之后,Java 中冗长的表达式不见了,取而代之的是简洁的Scala 方言。Scala提供了一些工具,这些工具可用于构建领域特定语言(DSL),以及对用户友好的API接口。


1.7 可扩展的架构

使用Scala,你能编写出简短的解释性脚本,并将其粘合成大型的分布式应用。以下四种语言机制有助于提升系统的扩展性:

1) 使用trait 实现的混合结构;

2) 抽象类型成员和泛型;

3) 嵌套类;

4) 显式自类型(self type)。


Scala 实际上是Scalable Language 的缩写,意为可扩展的语言。Scala 的发音为scah-lah,像意大利语中的staircase(楼梯)。也就是说,两个a 的发音是一样的。早在2001 年,Martin Odersky 便开始设计Scala,并在2004 年1 月20 日推出了第一个公开版本(参见http://article.gmane.org/gmane.comp.lang.scala/17)。Martin 是瑞士洛桑联邦理工大学(EPFL)计算机与通信科学学院的一名教授。在就读研究生时,Martin 便加入了由Niklaus Wirth1 领导的PASCAL fame 项目组。Martin 曾任职于Pizza 项目组,Pizza 是运行在JVM 平台上早期的函数式语言。之后与Haskell 语言设计者之一Philip Wadler 一起转战GJ。GJ 是一个原型系统,最终演变为Java 泛型。Martin 还曾受雇于Sun 公司,编写了javac 的参考编译器,这套系统后来演化成了JDK 中自带的Java 编译器。


2.scala和spark——为什么选择Scala

Spark是采用Scala语言设计的,要想学好Spark,Scala这一关必须是要过的。这也是为什么scala能传播这么火热的原因。


Scala是一门现代的多范式编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala允许用户使用命令和函数范式编写代码。Scala运行在Java虚拟机之上,可以直接调用Java类库。对于新手来说,Scala相对比较复杂,其看起来灵活的语法并不容易掌握,但是对于熟悉Scala的用户来说,Scala是一把利器,它提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构。Scala就非常适合用于数据处理和机器学习。 


在大数据和机器学习领域,很多开发者都有Python/R/Matlab语言的背景,相比与Java或者C++,Scala的语法更容易掌握。从以往的经验来看,只要掌握基本的集合API以及lambda,一个没有经验的新员工就可以快速上手处理数据。另外,Scala的性能比传统的Python或者R语言更好。 


由于Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序,所以Scala可以和大数据相关的基于JVM的系统很好的集成,比如基于JVM类库的框架Scalding(Cascading)、Summingbird(Scalding和Storm)、Scrunch(Crunch)、Flink(Java编写并有Scala的API),本身使用Scale开发的系统Spark、Kafka。另外,很多数据存储解决方案都支持JVM语言,比如Cassandra、HBase、Voldemort和Datomic。 



3.Scala 特性

开始接触Scala 时,你将会发现Scala 与Java 的第一个差异是,Scala 能用更少的代码做更多的事情。你写的每一行代码都充溢着Scala 简洁而强大的优点。你开始使用Scala的关键特性,熟读之后,这些特性便会让你的日常编程变得相当高效—Scala 简化了日常编程。


你可以使用 Scala 构建任意应用程序,小至小工具,大至完整的企业级应用。你可以使用熟悉的面向对象风格编程,也可以随时切换到函数式风格。Scala 并不会强迫开发人员使用唯一的风格编程,开发人员可以从自己熟悉的基础开始,并在适应后,利用更多其他特性,从而使自己变得更高产,使自己的程序更高效。让我们快速探索 Scala 的一些特性:


  • 同时支持命令式风格和函数式风格;

  • 纯面向对象;

  • 强制合理的静态类型和类型推断;

  • 简洁而富有表现力;

  • 能和Java 无缝地互操作;

  • 基于精小的内核构建;

  • 高度的伸缩性,仅用少量代码就可以创建高性能的应用程序;

  • 具有强大、易用的并发模型。



本 《Scala 教程》 也将从最基础的知识,由浅入深,持续更新,直至真正掌握Scala 这门编程语言。