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


原始标题:Scala Conditional Expressions