Scala中的控制结构,与其他编程语言,比如Java相比,并无太大差别,主要是分支和循环为主。但Scala中的控制结构大多具有返回值,而其他编程语言中的控制结构一般就仅仅是用于流程控制。
条件表达式
分支结构应该编程中最为常用的控制结构了,典型就是if-else。在Scala中,分支结构也是用关键字if-else,更具体的说无外乎以下3种形式:
if(布尔表达式 1){
// 如果布尔表达式 1 为 true 则执行该语句块
}else if(布尔表达式 2){
// 如果布尔表达式 2 为 true 则执行该语句块
}else if(布尔表达式 3){
// 如果布尔表达式 3 为 true 则执行该语句块
}else {
// 如果以上条件都为 false 执行该语句块
}
val s = if (x > 0) 1 else -1
if (x > 0) s = 1 else s = -1
Scala中 if 表达式有返回值。如果if 和 else 的返回值类型不一样,那么就返回两个返回值类型公共的父类。
object IfDemo {
def main(args: Array[String]): Unit = {
val num = 20
if (num > 20) "张三" else "李四"
if (num > 20) 0 else if (num == 20) 1 else 0
//因为if else 有返回值,那么可以直接将if else语句赋值给一个变量
// if else 语句的返回值,不需要加return
val name = if (num > 20) "张三" else "李四"
//如果if else 语句中,两个返回值类型不一样
//此时Scala会自动推断出两者的公共父类型,然后将公共父类型作为表达式的返回值类型
var name2: Any = if (num == 20) "张三" else 100
//如果if else 语句中,缺省else语句块,那么默认else的值就是Unit
// Unit用()表示,类似Java中的void
val name3 = if (num == 20) "王武"
//name3 与 name4等同
val name4 = if (num == 20) "王武" else ()
}
}
循环结构
Scala中,for循环语法结构:for (i <- 表达式 / 集合),让变量 i遍历<-右边的表达式/集合的所有值。
for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
// 11 12 13 21 22 23 31 32 33
for
Scala拥有与Java和C++相同的循环结构
Range
可以是一个数字区间表示i to j
,或者i until j
;左箭头<-
用于为变量x
赋值。
for( var x <- Range ){
statement(s);
}
大括号{}
中用于保存变量和条件,retVal
是变量, 循环中的yield
会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。
var retVal = for{ var x <- List
if condition1; if condition2...
}yield x
while
Scala提供了与 Java 类似的while和do…while循环。while语句的本身没有任何返回值类型,即while语句的返回结果是Unit类型的 () 。
Scala内置控制结构特地去掉了 break 和 continue。
特殊情况下如果需要终止循环,可以有以下三种方式:
- 使用Boolean类型的控制变量
- 使用return关键字
- 使用breakable和break,需要导入scala.util.control.Breaks包
对于Scala中的while
循环,只要给定的条件为true
,循环语句会重复执行循环体内的代码块。
while(condition)
{
statement(s);
}
do…while
do...while
循环会确保至少执行一次循环。
do {
statement(s);
} while( condition );