一、分支控制 if-else
一般的if-else使用与C和Java里的一样,不过Scala有一个不同之处:其分支语句可以有返回值
val result: Any = if (age <= 6){
println("童年")
"童年"
} else if(age < 18){
println("青少年")
"青少年"
} else if(age < 35){
println("青年")
age
} else if(age < 60){
println("中年")
age
} else {
println("老年")
age
}
println("result: " + result)
实现类似Java中三元运算符的功能
val res2 = if(age >= 18) "成年" else "未成年"
二、For 循环控制
Scala 也为 for 循环这一常见的控制结构提供了非常多的特性,这些 for 循环的特性被称为 for 推导式或 for 表达式。
1.范围数据循环(To)
for(i <- 1 to 3){
print(i + " ")
}
println()
其中1 to 3是1.to(3)的简写
2.范围数据循环(Until)
until与to的区别是until表示前闭合后开的范围,1 until 3不包括3
for(i <- 1 until 3) {
print(i + " ")
}
println()
其中1 until 3是1.until(3)的简写
3.循环守卫
循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为 false 则跳过,类似于 Java中的continue。
for(i <- 1 to 3 if i != 2) {
print(i + " ")
}
println()
4.循环步长
循环步长表示每次循环下标增加的数量,不设置则步长默认为1
还可以通过步长设为负数实现倒序输出,设置by -1就可以实现和reverse同样的功能
需求:输出 1 到 10 以内的所有奇数
for (i <- 1 to 10 by 2) {
println("i=" + i)
}
输出结果
i=1
i=3
i=5
i=7
i=9
为了兼容Java,Scala中同样有While 和 do…While 循环控制,但是并不推荐使用,因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量,而变量需要声明在 while 循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用 for 循环。
三、循环中断
Scala 内置控制结构特地去掉了 break 和 continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字Scala中使用breakable控制结构来实现 break 和 continue 功能。
1.采用异常的方式退出循环
def main(args: Array[String]): Unit = {
try {
for (elem <- 1 to 10) {
println(elem)
if (elem == 5) throw new RuntimeException
}
}catch {
case e =>
}
println("正常结束循环")
}
2.采用 Scala 自带的函数,退出循环
Breaks.breakable还是对抛出异常的包装
import scala.util.control.Breaks
def main(args: Array[String]): Unit = {
Breaks.breakable(
for (elem <- 1 to 10) {
println(elem)
if (elem == 5) Breaks.break()
}
)
println("正常结束循环")
}
3. 对 break 进行省略
上述break调用还可以简化
import scala.util.control.Breaks._
object TestBreak {
def main(args: Array[String]): Unit = {
breakable {
for (elem <- 1 to 10) {
println(elem)
if (elem == 5) break
}
}
println("正常结束循环")
} }