Scala提供了诸如if、while、for、try、match和函数调用等内建控制结构。
if
if(条件表达式){
//do something
}else{
//do something
}
简单的判断可以不使用{},如
val filename = if(!args.isEmpty) args[0] else "default.txt"
while
while(true){
//do something
}
for
枚举集合类
val files = (new java.io.File(".")).listFiles
for(file <- files)
println(file)
for(i <- 1 to 4)
println(i)
for(i <- 1 until 4)
println(i)
过滤
可以在遍历的过程中加入判断达到过滤的目的,多个过滤条件之间使用;进行分割。
val files = (new java.io.File(".")).listFiles
for(file <- files if(file.isFile);if(file.getName.endWith(".scala")))
println(file)
制造新集合
使用for{子句}yield{循环体}语法可以产生一个新的集合,yield关键字位于循环体左{之前;产生的新集合类型与遍历的集合类型相同。
val files = (new java.io.File(".")).listFiles
for{file <- files if(file.isFile);if(file.getName.endWith(".scala"))}yield{
// do something
}
try
抛出异常
异常的抛出看上去与 Java 的一模一样。首先创建一个异常对象然后用 throw 关键字抛出
try{
throw new IllegalArgumentException
}
捕获异常
使用catch子句捕获异常
catch{
case ex IOException =>
case ex IllegalArgumentException =>
}
finally
无论程序是否运行正常都要执行的代码放在此处。
finally{
//必须要执行的操作,如释放资源等。
}
match
类似Java语言的switch,只不过Scala中适应的数据类型更广泛,不单单是整数类型和枚举常量。
val arg = 常量值
val other = arg match{
case "case1" => //do something
case "case2 => //do something
case "case3" => //do something
case _ => //都不匹配情况下,do something
}
跳出循环
使用boolean类型变量控制循环
val flag = true
var res = 0
var n = 0
while(flag){
res += n
n += 1
if(n == 5){
flag = false
}
}
//if守卫
var flag = true
var res = 0
for(i <- 0 until 10 if flag){
res += i
if(i == 4) flag = false
}
使用return控制循环
var res = 0
for(i <- 0 until 10){
if(i == 5) return
res += 1
}
使用Breaks对象的break方法控制循环
import scala.util.control.Breaks._
var res = 0
breakable{
for(i <- 0 until 10){
if(i == 5)break
res += 1
}
}