从表面上看,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 语句来实现。