Scala学习笔记

写在前面

Scala是一门优秀的编程语言,它是一门纯面向对象的语言,且支持函数式编程。

Scala运行于Jvm,所有Scala的代码,都需要经过编译为字节码,然后交由Java虚拟机来运行。Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码

安装Scala

  1. 从Scala官方网站下载,http://www.scala-lang.org/download/,windows版本的安装包是`scala-2.11.7.msi`。

  2. 使用下载下来的安装包安装Scala。

  3. 在PATH环境变量中,配置$SCALA_HOME/bin目录。

  1. 在windows命令行内即可直接键入scala,打开scala命令行,进行scala编程。
1
2
3
4
5
$ scala
Welcome to Scala 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_231).
Type in expressions for evaluation. Or try :help.

scala>

基础语法

Scala解释器的使用

REPL

scala解释器也被称为REPL,会快速编译scala代码为字节码,然后交给JVM来执行。

Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循环)。

计算表达式

在scala>命令行内,键入scala代码,解释器会直接返回结果给你。如果你没有指定变量来存放这个值,那么值默认的名称为res,而且会显示结果的数据类型,比如Int、Double、String等等。

例如,输入1 + 1,会看到res0: Int = 2

1
2
scala> 1 + 1
res0: Int = 2

内置变量

在后面可以继续使用res这个变量,以及它存放的值。

例如,2.0 * res0,返回res1: Double = 4.0

1
2
scala> 2.0 * res0
res1: Double = 4.0

例如,”Hi, “ + res0,返回res2: String = Hi, 2

1
2
scala> "Hi, " + res0
res2: String = Hi, 2

自动补全

在scala>命令行内,可以使用Tab键进行自动补全。

例如,输入res2.to,敲击Tab键,解释器会显示出以下选项,toCharArray,toLowerCase,toString,toUpperCase。因为此时无法判定你需要补全的是哪一个,因此会提供给你所有的选项。

1
2
scala> res2.to
to toCharArray toIterable toMap ...

例如,输入res2.toU,敲击Tab键,直接会给你补全为res2.toUpperCase。

声明变量

声明val变量

可以声明val变量来存放表达式的计算结果。

  • 例如,val result = 1 + 1
1
2
scala> val result = 1 + 1
result: Int = 2
  • 后续这些常量是可以继续使用的,例如,2 * result
1
2
scala> 2 * result
res6: Int = 4
  • 但是常量声明后,是无法改变它的值的,例如,result = 1,会返回error: reassignment to val的错误信息。
1
2
3
4
scala> result = 1
<console>:12: error: reassignment to val
result = 1
^

声明var变量

如果要声明值可以改变的引用,可以使用var变量。

  • 例如,val myresult = 1,myresult = 2

  • 但是在Scala程序中,通常建议使用val,也就是常量,因此比如类似于spark的大型复杂系统中,需要大量的网络传输数据,如果使用var,可能会担心值被错误的更改。

  • 在Java的大型复杂系统的设计和开发中,也使用了类似的特性,我们通常会将传递给其他模块 / 组件 / 服务的对象,设计成不可变类(Immutable Class)。在里面也会使用Java的常量定义,比如final,阻止变量的值被改变。从而提高系统的健壮性(robust,鲁棒性),和安全性

指定类型

无论声明val变量,还是声明var变量,都可以手动指定其类型,如果不指定的话,Scala会自动根据值,进行类型的推断

  • 例如,val name: String = null

  • 例如,val name: Any = "leo"