Scala只内置了为数不多的几种程序控制语句:if、while、for、try catch以及函数调用,这是因为从Scala诞生开始就包含了函数字面量,Scala内核没有定义过多的控制结构,而是可以通过额外的库来扩展程序的控制结构。
一、if表达式
与其他语言相同,Scala中的if也是选择(分支),与其他的语言不同的是每个表达式都可以返回值。
var age = 25 val result = if(age > 20) "worker" else "student" println(result)
二、while循环
有两种形式, while(......){} 和 do{}while(......)
Scala中while和do-while被成为循环而不是表达式,是因为它们没有返回值,返回Unit或者()
三、for表达式
1.for的一个基本用法与Java相似,可用于枚举集合元素
val filesHere = (new java.io.File(".")).listFiles
for(file <- filesHere)
println(file)
支持所有类型的集合类型
for(i <- 1 to 4)
println(i)
2.过滤
for表达式可以添加一个过滤器——在for的括号内添加一个或多个if语句。
例如,不枚举集合中的每个元素,而是只迭代某些符合条件的元素。
val filesHere = (new java.io.File(".")).listFiles
for(file <- filesHere
if file.isFile
if file.getName.endsWith(".scala"))
println(file)
3.嵌套迭代
for表示式支持多重迭代
4.绑定中间变量
5.生成新集合
基本语法 : for clauses yield body ,其中 clauses yield 是关键字
四、用try表达式处理异常
1.抛出异常
抛出异常的方式与Java中相同
val half =
if (n % 2 == 0)
n/2
else
throw new RuntimeException("n must be even")
2.捕获异常
try{}catch{}
3.finally
finally中如果有返回值将会覆盖try中的返回值,所以在finally中应尽量避免使用return
4.生成返回值
五、Match表达式
该表达式支持从多个选择中选取其一执行,类似Java中的switch
true/false布尔表达式 match {
case "salt" => println("pepper")
case "chips" => println("salsa")
case "eggs" => println("bacon")
case _ => println("huh?")
}
使用中注意以下三点:
case 语句中,而不仅仅是 int 或是枚举类型。case 语句无需使用 break ,Scala不支持“fall through”。_ ,其作用类似 java 中的 default。
六、Scala中没有提供break和continue,但是可以使用一些方法实现break和continue的功能
var i=0
var foundIt=false
while (i < args.length && !foundIt) {
if (!args(i).startsWith("-")) {
if(args(i).endsWith(".scala"))
foundIt=true
}
i=i+1
}
当然,Scala 在scala.util.control 包中定义了 break 控制结构。它的实现是通过抛出异常给上级调用函数。
import scala.util.control.Breaks._
import java.io._
val in = new BufferedReader(new InputStreamReader(System.in))
breakable {
while(true) {
println("? ")
if(in.readLine()=="") break
}
}
原文:https://www.cnblogs.com/aston/p/8798654.html