2.1 数据类型

2.1.1 数据类型

Scala 与 Java有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生
类型。Scala数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型), 注意:不管是AnyVal还是AnyRef
都是对象。
image.png
下表列出了 Scala 支持的数据类型:
image.png

2.1.2 字面量

1、整型字面量
整型字面量用于 Int 类型,如果表示 Long,可以在数字后面添加 L 或者小写 l 作为后缀,如:
214(十进制)、0x2E(十六进制)、214L(长整形)
2、浮点型字面量
如果浮点数后面有f或者F后缀时,表示这是一个Float类型,否则就是一个Double类型,如:
0.163(Double)、0.163F(Float)、1.63E-1(科学计数法)、1.63e-1(科学计数法)
3、布尔型字面量
布尔型字面量有 true 和 false。
4、字符字面量
在 Scala 字符变量使用单引号 ‘ 来定义,如:
‘a’、 ‘\u0041’、 ‘\n’、’\t’,其中 \ 表示转义字符。
5、字符串字面量
在 Scala 字符串字面量使用双引号 “ 来定义,如:
“Hello World!”
多行字符串用三个双引号来表示分隔符,格式为:””” … “””,如:
val foo = “””Scala教程
www.runoob.com
www.w3cschool.cc
www.runnoob.com
以上三个地址都能访问”””
6、Null 值
空值是 scala.Null 类型。
Scala.Null和scala.Nothing是用统一的方式处理Scala面向对象类型系统的某些”边界情况”的特殊类型。
Null类是null引用对象的类型,它是每个引用类(继承自AnyRef的类)的子类。Null不兼容值类型。

2.2 变量

2.2.1 变量声明

在 Scala 中,使用关键词 “var” 声明变量,使用关键词 “val” 声明常量。

  • 变量:在程序运行过程中其值可能发生改变的量叫做变量。如:时间,年龄。
  • 常量 :在程序运行过程中其值不会发生变化的量叫做常量。如:数值 3,字符’A’。

var VariableName : DataType [= Initial Value] //声明变量
val VariableName : DataType [= Initial Value] //声明常量
image.png

2.2.2 变量类型引用

在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。所以,如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。
image.png

2.3 运算符

2.3.1 算术运算符

下表列出了 Scala 支持的算术运算符。
假定变量 A 为 10,B 为 20:
image.png

2.3.2 关系运算符

下表列出了 Scala 支持的关系运算符。
假定变量 A 为 10,B 为 20:
image.png

2.3.3 逻辑运算符

下表列出了 Scala 支持的逻辑运算符。
假定变量 A 为 true,B 为 false:
image.png

2.3.4 赋值运算符

以下列出了 Scala 语言支持的赋值运算符:
image.png

2.4 IF…ELSE 语句

Scala IF…ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。
下图是条件语句的执行过程:
image.png

2.4.1 if 语句

if 语句有布尔表达式及之后的语句块组成。
if(布尔表达式) {
// 如果布尔表达式为 true 则执行该语句块
}
【例】
image.png

2.4.2 if …else…语句

if 语句后可以紧跟 else 语句,else 内的语句块可以在布尔表达式为 false 的时候执行。
if(布尔表达式){
// 如果布尔表达式为 true 则执行该语句块
}else{
// 如果布尔表达式为 false 则执行该语句块
}
【例】
image.png

2.4.3 if …else if…else…语句

if 语句后可以紧跟 else if…else 语句,在多个条件判断语句的情况下很有用。
if(布尔表达式 1){
// 如果布尔表达式 1 为 true 则执行该语句块
}else if(布尔表达式 2){
// 如果布尔表达式 2 为 true 则执行该语句块
}else if(布尔表达式 3){
// 如果布尔表达式 3 为 true 则执行该语句块
}else {
// 如果以上条件都为 false 执行该语句块
}
【例】
image.png

2.4.4 if…else 嵌套语句

if…else 嵌套语句可以实现在 if 语句内嵌入一个或多个 if 语句。
if(布尔表达式 1){
// 如果布尔表达式 1 为 true 则执行该语句块
if(布尔表达式 2){
// 如果布尔表达式 2 为 true 则执行该语句块
}
}
else if…else 的嵌套语句 类似 if…else 嵌套语句。
【例】
image.png

2.5 循环语句

一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。有的时候,我们可能需要多次执行同一块代码,编程语言提供了更为复杂执行路径的多种控制结构,循环语句允许我们多次执行一个语句或语句组。下面是循环语句的流程图:
image.png

2.5.1 while 循环

只要给定的条件为 true, while 循环语句会重复执行循环体内的代码块。
while(布尔表达式) {
// 布尔表达式的值为true,重复执行语句块
}
【例】
image.png

2.5.2 do…while 循环

不像 while 循环在循环头部测试循环条件, do…while 循环是在循环的尾部检查它的条件。
do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环。
do {
// 布尔表达式的值为true,重复执行语句块
}while(布尔表达式);
【例】
image.png
while和do-while循环的区别在于do-while先执行语句再判断条件,将上例var i =11;与var i = 1的执行结果是不一样。

2.5.3 for循环

for 循环允许您编写一个执行指定次数的循环控制结构。

2.5.3.1 i to j 循环

for( x <- i to j ){
// i<=j,重复执行语句块
}
左箭头 <- 用于为变量 x 赋值。
【例】
image.png

2.5.3.2 i until j 循环

for( x <- i until j ){
// i }
【例】
image.png

2.5.3.3 循环集合

for( x <- List ){
// 迭代所有集合的元素
}
List 变量是一个集合或数组。
【例】
image.png
执行结果:
image.png