变量

Scala有两种类型变量:可变的和不可变的。

不可变意味着变量的值一旦声明就不能更改。数据不变性帮助在管理数据时实现并发控制。强烈建议不要使用可变变量。Scala作为语言中的第一类公民,高度鼓励不变性。一个纯函数程序永远也不要使用可变变量。

不过,有时可变变量的使用可能会导致更少的代码复杂性,因此Scala 也支持可变变量。可变变量应该被谨慎使用。

在Scala中,声明变量的关键字有三种:val、var和lazy val。其中:

  • val:声明的变量是不可变的(只读的)。使用val关键字声明不可变变量就像在Java中声明final变量一样。
  • var:声明的变量是可变的。在变量创建以后,可以重新赋值。
  • lazy val:变量只被计算一次,在该变量第一次被访问时。

在下面的代码中,我们分别使用val定义不可变的变量,使用var来定义可变的变量。

使用val 关键字声明的变量在初始化以后,不允许重新赋值(否则编译器在编译时会出现错误):

使用lazy关键字可实现惰性求值特性,这允许用户延迟任何表达式的执行。当使用lazy关键字声明表达式时,它只会在显式调用时执行。在下面的代码中,表达式sum是用lazy关键字定义的。

val x = 3
val y = 5
lazy val sum = a + b
print(sum)

因此,只有在调用它时才计算它。需要注意的是,惰性计算特性只能在val中使用。

前面的代码中,我们在定义变量时,并没有指定数据类型。在Scala中,不强制显式地指定变量的数据类型,编译器可以通过内置的类型推断机制,根据变量的初始化来识别变量的类型,这称为"类型推断"

如果想要明确地指定变量的数据类型,可以在变量名后面跟上一个冒号(:),后面指定数据类型,像下面这样:

Scala 是一个静态类型语言,因此一切都有一个类型。不过,Scala 并不要求开发者一定要声明类型,它可以自己推断出来。因此,用Scala 编码需要更少的输入,并且代码看上去更简洁。


《Flink原理深入与编程实战》