Scala中的 if else 语句

2019-05-04 09:00:18 | 编辑 | 添加

从表面上看,Scala 的if 语句看起来很像Java 中的if 语句。执行if 语句时先对if 条件表达式进行估值。假如表达式结果为true,那么将执行对应的代码块。反之,将测试下一条件分支,以此类推。下面列举了一个简单示例:

if (2 + 2 == 5) {
println("Hello from 1984.")
} else if (2 + 2 == 3) {
println("Hello from Remedial Math class?")
} else {
println("Hello from a non-Orwellian future.")
}

Scala 与Java 语言不同,Scala 中的if 语句和几乎所有的其他语句都是具有返回值的表达式。因此我们能像下面展示的代码那样,将if 表达式的结果值赋给其他变量。


val configFile = new java.io.File("somefile.txt")
val configFilePath = if (configFile.exists()) {
configFile.getAbsolutePath()
} else {
configFile.createNewFile()
configFile.getAbsolutePath()
}


if 语句返回值的类型也被称为所有条件分支的最小上界类型,也就是与每条each 子句可能返回值类型最接近的父类型。在上面这个例子中,configFilePath 是if 表达式的结果值,该if 表达式将执行文件不存在的条件分支,并返回新创建文件的绝对路径。将if 语句的返回值赋予变量configFilePath 之后,整个应用程序都可以使用该值,其类型为String 类型。

Scala 中的if 语句是一类表示式,像predicate ? trueHandler() : falseHandler() 这种三元表达式对于Scala 来说是多余的, 因此Scala 并不支持三元表达式。虽然Scala部支持三目运算符,但我们也可以比较方便的用 if else 语句来实现。