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{循環(huán)體}語法可以產生一個新的集合,yield關鍵字位于循環(huán)體左{之前;產生的新集合類型與遍歷的集合類型相同。
val files = (new java.io.File(".")).listFiles
for{file <- files if(file.isFile);if(file.getName.endWith(".scala"))}yield{
// do something
}
try
拋出異常
異常的拋出看上去與 Java 的一模一樣。首先創(chuàng)建一個異常對象然后用 throw 關鍵字拋出
try{
throw new IllegalArgumentException
}
捕獲異常
使用catch子句捕獲異常
catch{
case ex IOException =>
case ex IllegalArgumentException =>
}
finally
無論程序是否運行正常都要執(zhí)行的代碼放在此處。
finally{
//必須要執(zhí)行的操作,如釋放資源等。
}
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
}
跳出循環(huán)
使用boolean類型變量控制循環(huán)
val flag = true
var res = 0
var n = 0
while(flag){
res += n
n += 1
if(n == 5){
flag = false
}
}
//if守衛(wèi)
var flag = true
var res = 0
for(i <- 0 until 10 if flag){
res += i
if(i == 4) flag = false
}
使用return控制循環(huán)
var res = 0
for(i <- 0 until 10){
if(i == 5) return
res += 1
}
使用Breaks對象的break方法控制循環(huán)
import scala.util.control.Breaks._
var res = 0
breakable{
for(i <- 0 until 10){
if(i == 5)break
res += 1
}
}