1.2 Scala的基础语法
1.2.1 声明值和变量
Scala有两种类型的变量,一种是使用关键字var声明的变量,值是可变的;另一种是使用关键字val声明的变量,也叫常量,值是不可变的。
使用关键字var声明的变量
var myVar:String="Hello"
1
使用关键字val声明的变量
val age:Int=10
1
有以下几个事项需要注意:
Scala中的变量在声明时必须进行初始化。
使用var声明的变量可以在初始化后再次对变量进行赋值;
使用val声明的常量的值不可被再次赋值。
声明变量时,我们可以不给出变量的类型,因为在初始化的时候,Scala的类型推断机制能够根据变量的初始化的值自动推算出来。
上述声明变量myVar和age的代码,等同于下列代码:
var myVar = "Hello" //使用关键字var声明的变量
val age = 10 //使用关键字val声明的变量
1
2
3
注:使用关键字var或val声明变量时,后面紧跟的变量名称不能和Scala中的保留字重名,而且变量名可以以字母或下划线开头,且变量名是严格区分大小写的。
1.2.2 数据类型
任何一种编程语言都有特定的数据类型,Scala也不例外。
与其他语言相比,Scala中的所有值都有一个类型,包括数值和函数。
Scala中数据类型的层次结构
从上图中可以看出,Any是所有类型的超类型,也称为顶级类型,它包含两个直接子类,具体如下:
AnyVal:表示值类型,值类型描述的数据是一个不为空的值,而不是一个对象。它预定义了9种类型,分别是Double、Float、Long、Int、Short、Byte、Unit、Char和Boolean。其中,Unit是一种不代表任何意义的值类型,它的作用类似Java中void。
AnyRef:表示引用类型。可以认为,除值以外,所有类型都继承自AnyRef。
在Scala数据类型层级结构底部,还有两个数据类型,分别是Nothing和Null,具体介绍如下:
Nothing:所有类型的的子类型,也称为底部类型。它觉的用途是发出终止信号,例如抛出异常、程序退出或无限循环。
Null:所有引用类型的子类型,它主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。
1.2.3 算术和操作符重载
Scala中算术操作符(+、-、*、/、%)的作用和Java是一样的,位操作符(&、|、>>、<<)也是一样的。特别强调的是,Scala的这些操作符其实是方法。例如,a+b其实是a.+(b)的简写。
注:Scala没有提供操作符++和–。如果我们想实现递增或者递减的效果,可以使用“+=1”或者“-=1”这种方式来实现。
1.2.4 控制结构语句
在Scala中,控制结构语句包括条件分支语句和循环语句。其中,条件分支语句有if语句、if…else语句、if…else if…else语句以及if…else嵌套语句;循环语句有for循环,while循环和do…while循环。
条件分支语句
if条件语句
if (布尔表达式){
语句块
}
1
2
3
if-else条件语句
if (布尔表达式){
语句块
} else{
语句块
}
1
2
3
4
5
if-else-if-else语句
if (布尔表达式1){
语句块
} else if(布尔表达式2){
语句块
} else if(布尔表达式3){
语句块
} else {
语句块
}
1
2
3
4
5
6
7
8
9
if-else嵌套语句
if (布尔表达式1){
语句块
if(布尔表达式2){
语句块
}
}else if (布尔表达式3){
语句块
else if (布尔表达式4){
语句块
}
}else{
语句块
}
1
2
3
4
5
6
7
8
9
10
11
12
13
示例代码如下:
2. 循环语句
Scala中的for语句和Java中的循环语句在语法上有较大的区别,下面我们来介绍一下Scala中的for循环语句。
for循环语句
for(变量<-表达式/数组/集合){
循环语句;
}
1
2
3
下面,我们通过从0循环到9,每循环一次则就将该值打印输出进行操作演示。在Scala语法中,可以使用”0 to 9”表示从0到9的范围,范围包含9,示例代码如下:
Dos 命令行下
IDEA下
结果如下:
0 1 2 3 4 5 6 7 8 9
Scala在for循环语句中可以通过使用if判断语句过滤一些元素,多个过滤条件用分号分隔开。例如,输出0-9范围中大于5的偶数,示例代码如下:
while循环语句
Scala中的while循环语句和Java中的完全一样,语法格式如下:
while语句
while(布尔表达式){
循环语句;
}
1
2
3
下面,我们通过打印输出奇数的案例来演示while的使用。
假设有一个变量x=1,判断是否小于10,如果是则打印输出,然后再进行+2运算。
示例代码如下:
do-while语句
do{
循环语句;
}while(布尔表达式)
1
2
3
do…while循环语句与while语句的主要区别是,do…while语句的循环语句至少执行一次,示例代码如下: