Scala IF...ELSE
Scala 条件表达式(if-else)
Section titled “Scala 条件表达式(if-else)”Scala 中的条件逻辑通过 if、else if 和 else 来处理。Scala 的一个重要特性是,if-else 结构是表达式(expressions),这意味着它们会评估并产生一个值。
if 表达式:
Section titled “if 表达式:”仅当布尔(boolean)条件为真(true)时执行代码块。
if (booleanCondition) { // 如果条件为真,则执行此代码块}val temperature = 25
if (temperature > 30) { println("It's hot!")}// 如果 temperature 不 > 30,这里什么也不会发生。if-else 表达式:
Section titled “if-else 表达式:”提供一个备选的代码块,当条件为假(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: ()if-else if-else 表达式:
Section titled “if-else if-else 表达式:”允许按顺序检查多个条件。
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 表达式:
Section titled “嵌套的 if-else 表达式:”你可以将 if-else 表达式相互嵌套,但深层嵌套可能会使代码难以阅读。对于复杂的条件逻辑,考虑使用 match 表达式。
val isMember = trueval 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 是一个表达式,它可以自然地融入函数式编程风格,允许简洁的赋值以及在其他表达式中使用。