概述
在使用 Spark 时,很多的例子是使用 Scala 语言进行编写,因此有必要对 Scala 的语法与使用进行学习。
Scala 是面向对象、函数式、静态类型编程语言。
Scala 提供了命令行,可以以命令行方式执行。
Scala 可以运行于 JVM 环境,能够与 Java 语言很方便地交互,同样能够访问很多的 Java 库。
简单例子
表达式
|
|
值
使用 val
定义 (类似于常量)
|
|
变量
使用 var
定义
|
|
块
以 { }
包裹,注意块的值
···scala
println({
val a = 1 + 1
a + 1
}) // 输出 3
方法
方法与函数非常类似,但有几点关键的不同
- 方法使用
def
定义,def
之后跟上方法的名称,然后是参数列表,然后是返回值类型,最后是方法的内容
|
|
- 方法可以拥有多个参数列表,或者无参数列表
|
|
方法和函数在内容较多时可以使用块,但 Scala 没有 return
语句,返回值即为块的值
|
|
类
|
|
这里返回类型 Unit
与其他语言的 void
类似
case class
case class 默认是不可变 (immutable) 的,并以值来比较
|
|
实例化 case class 不需要使用 new
关键字,直接通过 ==
比较
对象
对象类似于单实例的类,可以理解为静态类
|
|
Traits
Traits 可以包含字段与方法,多个 Traits 可以组合
|
|
主方法
程序的入口
|
|
类型
所有类型都继承自 Any
,Any
有 equals
、hashCode
、toString
方法。Any
有两个子类,分别是 AnyVal
和 AnyRef
。AnyVal
是值类型的祖先,不能是 null
, 有九个预定义的类型: Double
、Float
、Long
、Int
、Short
、Byte
、Char
、Unit
、Boolean
。AnyRef
是引用类型的祖先,如果 Scala 运行与 JVM 环境, AnyRef
与 java.lang.Object
是一样的。
|
|
Nothing
类型是所有类型的子类型,Nothing
没有值Null
类型是所有引用类型的子类
类型转换
值类型可以从低范围的类型转换到高范围的类型
|
|
类
定义类
|
|
Getter/Setter 语法
|
|
在构造器中的参数,如果使用 val
或 var
修饰则代表他们是 public
的,否则则代表是 private
的。使用 val
修饰时不可被修改。
类型组合与混合
|
|
|
|
高阶函数
函数是函数式编程语言的一等公民,在 Scala 中,将使用函数作为参数或返回函数的方法和函数称为 “高阶函数”。
|
|
Scala 支持嵌套的函数与方法定义。
正则表达式
|
|
Scala 使用 """
来使用多行字符串,注意第二行开始的 |
,最后使用 stripMargin
会将行首的 |
与其之前的空白去掉。
|
|