1. 概述
if-else
是编程语言中最基础的条件控制结构之一,它允许我们根据某个条件的真假来决定执行哪段代码。本文将深入讲解 Scala 中的条件表达式特性。
2. if 表达式
Scala 中的 if
表达式的语法与 Java 或 C++ 等命令式语言类似:
if (<condition expression>) {
<expression>
} else {
<expression>
}
其中 <condition expression>
是一个布尔表达式。如果该表达式为 true
,则执行第一个表达式;否则执行第二个表达式(如果有 else
分支)。
需要注意的是,else
分支是可选的。也就是说,可以只写 if
而不带 else
:
✅ 示例:基础 if 表达式
def max(a: Int, b: Int): Unit = {
var max: Int = a
if (b > a) {
max = b
}
printf("Maximum is %d", max)
}
这个函数的作用是打印两个数中的最大值。首先将 max
初始化为 a
,然后判断 b
是否大于 a
,如果是,则更新 max
的值为 b
,最后输出结果。
再来看一个带 else
的示例:
if (10 % 2 == 0) {
printf("Number is even")
} else {
printf("Number is odd")
}
由于 10 能被 2 整除,因此输出:
Number is even
⚠️ 注意:如果表达式中只有一条语句,可以省略大括号,但为了代码可读性,建议始终加上大括号。详见 Scala Style Guide。
2.1 嵌套 if 表达式
在 Scala 中,每个 if
表达式内部都可以继续嵌套 if-else
结构,从而形成多重判断逻辑:
val number = 10
if (number == 0) {
printf("Number is zero")
} else if (number > 100) {
printf("Number is greater than 100")
} else {
printf("Number is %d", number)
}
因为 number
是 10,前两个条件都不满足,所以执行最后一个 else
分支,输出:
Number is 10
2.2 返回值和类型
Scala 的 if
表达式与其他语言有一个关键不同点:
✅ Scala 中所有的语句都是表达式,并且都会返回一个值。
也就是说,if
表达式总是会返回一个值,我们可以直接把它赋给一个变量或作为函数返回值使用。
比如我们可以这样重写之前的 max
函数:
def max(a: Int, b: Int): Int = {
if (b > a) {
b
} else {
a
}
}
这里直接返回了 if
表达式的结果,也就是两个数中的较大者。
返回类型推导规则:
if
表达式的返回类型是两个分支表达式的最近公共父类型(closest supertype)- 如果没有
else
分支,那么其返回类型为Any
验证如下(在 Scala REPL 中):
scala> val result = if (false) "failed"
result: Any = ()
3. 使用 if 实现惯用法初始化
在 Scala 中,使用 if
表达式来进行变量的条件初始化是一种惯用法(idiomatic way)。
相比 Java 中使用三元运算符的方式,Scala 的做法更加简洁优雅:
val max: Int = if (10 > 100) {
10
} else {
100
}
这段代码中,max
被初始化为 100,因为 10 并不大于 100。
⚠️ Scala 没有传统的三元运算符(如 a > b ? a : b
),因为 if
表达式已经具备相同功能,甚至更强大。这是 Scala “用更少做更多”的设计哲学体现。
4. 总结
本文我们详细介绍了 Scala 中的 if
表达式:
✅ 它是一个表达式,而不是语句
✅ 总是返回一个值
✅ 可以用于条件变量初始化,避免使用 var
✅ 支持嵌套和复杂的条件判断
通过合理使用 if
表达式,可以写出更具表达力、更安全(不可变)的 Scala 代码。
📌 所有示例代码均可在 GitHub 上获取:https://github.com/Baeldung/scala-tutorials/tree/master/scala-lang-modules/scala-lang