Skip to content

Scala IF...ELSE

Scala 中的条件逻辑通过 if、else if 和 else 来处理。Scala 的一个重要特性是,if-else 结构是表达式(expressions),这意味着它们会评估并产生一个值。

仅当布尔(boolean)条件为真(true)时执行代码块。

if (booleanCondition) {
// 如果条件为真,则执行此代码块
}
val temperature = 25
if (temperature > 30) {
println("It's hot!")
}
// 如果 temperature 不 > 30,这里什么也不会发生。

提供一个备选的代码块,当条件为假(false)时执行。因为它是一个表达式,其结果可以赋值给一个变量。

val result = if (booleanCondition) {
// 如果条件为真,则返回的值或评估结果
} else {
// 如果条件为假,则返回的值或评估结果
}

重要提示: if 和 else 这两个分支必须返回兼容类型的值,以便整个表达式具有明确定义的类型。如果类型不兼容,编译器将推断出一个共同的超类型(supertype),可能为 Any。

val age = 18
val message = if (age >= 18) {
"Adult"
} else {
"Minor"
}
println(s"Status: $message") // 输出: Status: Adult
// 具有不同返回类型的示例(结果为 Any 类型)
val result: Any = if (age < 10) {
"Child"
} else {
false // Boolean 与 String 不兼容,结果是 Any
}
println(s"Mixed result type: $result") // 输出: Mixed result type: false

如果省略 else 部分,并且条件为假,则该表达式隐式地产生 Unit(())结果。

val unitResult = if (age < 10) { println("Young") }
println(s"Unit result: $unitResult") // 输出: Unit result: ()

允许按顺序检查多个条件。

val result = if (condition1) {
// condition1 为真时返回的值
} else if (condition2) {
// condition2 为真时返回的值
} else if (condition3) {
// condition3 为真时返回的值
} else {
// 以上条件都不为真时返回的值
}

第一个评估为 true 的条件决定了执行的代码块和结果值。最后的 else 是可选的,但如果在所有情况下都需要一个值,则建议加上(否则结果类型可能变成 Any 或 Unit)。

val score = 75
val grade = if (score >= 90) {
'A'
} else if (score >= 80) {
'B'
} else if (score >= 70) {
'C'
} else if (score >= 60) {
'D'
} else {
'F'
}
println(s"Score: $score, Grade: $grade") // 输出: Score: 75, Grade: C

你可以将 if-else 表达式相互嵌套,但深层嵌套可能会使代码难以阅读。对于复杂的条件逻辑,考虑使用 match 表达式。

val isMember = true
val userAge = 25
val discount = if (isMember) {
if (userAge > 60) {
0.20 // 60 岁以上会员享有 20% 折扣
} else {
0.10 // 普通会员享有 10% 折扣
}
} else {
0.0 // 非会员无折扣
}
println(s"Discount: ${discount * 100}%") // 输出: Discount: 10.0%

因为 if-else 是一个表达式,它可以自然地融入函数式编程风格,允许简洁的赋值以及在其他表达式中使用。