Scala学习笔记
写在前面
Scala是一门优秀的编程语言,它是一门纯面向对象的语言,且支持函数式编程。
Scala运行于Jvm,所有Scala的代码,都需要经过编译为字节码,然后交由Java虚拟机来运行。Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码。
安装Scala
从Scala官方网站下载,http://www.scala-lang.org/download/,windows版本的安装包是`scala-2.11.7.msi`。
使用下载下来的安装包安装Scala。
在PATH环境变量中,配置$SCALA_HOME/bin目录。
- 在windows命令行内即可直接键入scala,打开scala命令行,进行scala编程。
1 | $ scala |
基础语法
Scala解释器的使用
REPL
scala解释器也被称为REPL,会快速编译scala代码为字节码,然后交给JVM来执行。
Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循环)。
计算表达式
在scala>命令行内,键入scala代码,解释器会直接返回结果给你。如果你没有指定变量来存放这个值,那么值默认的名称为res,而且会显示结果的数据类型,比如Int、Double、String等等。
例如,输入1 + 1,会看到res0: Int = 2
1 | scala> 1 + 1 |
内置变量
在后面可以继续使用res这个变量,以及它存放的值。
例如,2.0 * res0,返回res1: Double = 4.0
1 | scala> 2.0 * res0 |
例如,”Hi, “ + res0,返回res2: String = Hi, 2
1 | scala> "Hi, " + res0 |
自动补全
在scala>命令行内,可以使用Tab键进行自动补全。
例如,输入res2.to,敲击Tab键,解释器会显示出以下选项,toCharArray,toLowerCase,toString,toUpperCase。因为此时无法判定你需要补全的是哪一个,因此会提供给你所有的选项。
1 | scala> res2.to |
例如,输入res2.toU,敲击Tab键,直接会给你补全为res2.toUpperCase。
声明变量
声明val变量
可以声明val变量来存放表达式的计算结果。
- 例如,val result = 1 + 1
1 | scala> val result = 1 + 1 |
- 后续这些常量是可以继续使用的,例如,2 * result
1 | scala> 2 * result |
- 但是常量声明后,是无法改变它的值的,例如,result = 1,会返回error: reassignment to val的错误信息。
1 | scala> 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"