背景
- 因为Spark是由Scala开发的,所以在开发Spark应用程序之前要对Scala语言学习。虽然Spark也支持Java、Python语言,但是作为一名Java程序猿,还是决定要学习Scala哈。
- Scala是运行在JVM上一门语言。开发效率非常高、语法丰富简洁,三两行Scala代码能搞定Java要写的一大坨代码。
- Scala的语法糖太甜~~
Scala特性
面向对象特性
- Scala是一种纯面向对象的语言,每个值都是对象。
函数式编程
-
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。
-
可以利用Scala的模式匹配,编写类似正则表达式的代码处理数据。
并发性
- Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过“邮箱”发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。
主要内容
- 声明变量、常用类型
- 控制结构(条件、循环、for)、函数
- 常用数组操作
- 类与对象
- 继承与特质
- 集合
- 模式匹配和样例类
声明变量、常用类型
- scala代码会被编译成字节码,然后交给Java虚拟机执行。
- 不强制指定变量的类型,编译器会推断出来。
scala> 8 * 5
res0: Int = 40
- val定义的值无法改变它的内容。在Scala中,鼓励使用val。
scala> val answer = 8 * 5
answer: Int = 40
scala> answer = 10
<console>:8: error: reassignment to val
answer = 10
- 如果要声明其值可变的变量,用var。
scala> var counter = 0
counter: Int = 0
scala> counter = 10
counter: Int = 10
- 变量或函数的类型总是写在变量或函数名称后面,与Java的习惯不同。
scala> val greeting : String = "Hello"
greeting: String = Hello
- 不需要使用分号最后,仅当同一行代码中存在多条语句时才需要分号隔开。
- 常用的数据类型与Java一样,Byte、Char、Short、Int、Long、Float、Double及Boolean,这些都是类。
- 在基本类型和包装类型之间的转换是Scala编译器的工作。
- +-*/%等操作符实际上是方法。
- 对于BigInt和BigDecimal对象,可以以常规的方式使用数学操作符(但在Java中同样的操作要写成x.multiply(x))。
scala> val x : BigInt = 123
x: BigInt = 123
scala> x * x
res1: scala.math.BigInt = 15129
- 不带参数的Scala方法通常不使用圆括号,一般没有参数且不改变当前对象的方法不带圆括号。
敬请期待下一篇~