Scala for Backend Engineering & Functional Programming · 课时

表达式优于语句

一切皆为表达式

第 3 / 4 课13 个步骤

表达式优于语句 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 4 节课。

表达式与语句

语句会执行某些操作,但不会返回有用的结果。表达式求值后会得到一个值。

在 Scala 中,几乎所有内容都是表达式。这是一个影响代码编写方式的核心思想。

if 是表达式

在许多语言中,if 是语句。而在 Scala 中,if/else 会返回一个值,因此您可以直接将它赋给 val。

您不需要在每个分支中分别给变量赋值。

object Main {
  def main(args: Array[String]): Unit = {
    val temp = 30
    val label = if (temp > 25) "hot" else "mild"
    println(label)
  }
}

代码块是表达式

代码块 { ... } 也是表达式。它的值就是其中最后一行的值。

因此,您可以先计算中间值,最后以结果结束。

object Main {
  def main(args: Array[String]): Unit = {
    val result = {
      val a = 2
      val b = 3
      a * b
    }
    println(result)
  }
}

match 是表达式

使用 match 进行模式匹配同样会返回一个值。每个分支都会产生一个结果,整个表达式则得到匹配分支的值。

object Main {
  def main(args: Array[String]): Unit = {
    val day = 3
    val name = day match {
      case 1 => "Mon"
      case 2 => "Tue"
      case 3 => "Wed"
      case _ => "Other"
    }
    println(name)
  }
}

Unit 类型

有些表达式存在的目的只是产生副作用,例如 println。它们返回 Unit,写作 ()。

Unit 类似于其他语言中的 void,但它仍然是一个真正的值。

object Main {
  def main(args: Array[String]): Unit = {
    val nothing: Unit = println("side effect")
    println(nothing)
  }
}

从函数返回

由于函数体是一个表达式,最后一个表达式就是函数的返回值。您很少需要使用 return 关键字。

这里的函数体就是一个表达式。

object Main {
  def max(a: Int, b: Int): Int = if (a > b) a else b
  def main(args: Array[String]): Unit = {
    println(max(7, 4))
  }
}

面向表达式的函数

函数可以是一个代码块表达式,其最后一行就是结果。这样可以让逻辑更紧凑,并避免使用可变的临时值。

object Main {
  def discount(price: Double): Double = {
    val rate = if (price > 100) 0.2 else 0.1
    price * (1 - rate)
  }
  def main(args: Array[String]): Unit = {
    println(discount(150.0))
  }
}

无需修改状态

由于 if 和 match 都是表达式,您可以将它们的结果赋给 val,而不是修改 var。

这样可以编写出更简洁、更具函数式风格的代码。

object Main {
  def main(args: Array[String]): Unit = {
    val score = 85
    val grade = if (score >= 90) "A"
      else if (score >= 80) "B"
      else "C"
    println(grade)
  }
}

组合表达式

由于所有内容都会返回一个值,表达式可以自由嵌套和组合。一个表达式的输出可以成为另一个表达式的输入。

这种可组合性是 Scala 具有表现力的重要原因。

object Main {
  def main(args: Array[String]): Unit = {
    val n = 7
    val message = "n is " + (if (n % 2 == 0) "even" else "odd")
    println(message)
  }
}

为什么这很重要

面向表达式的代码可以:

  • 减少对可变变量的需求
  • 明确展示值的流动过程
  • 自然地组合成更大的程序
  • 与不可变性完美配合

综合示例

这里的代码块表达式包含一个 if 表达式,并将所有内容赋给一个不可变结果。

object Main {
  def main(args: Array[String]): Unit = {
    val total = {
      val items = 3
      val each = 12
      val raw = items * each
      if (raw > 30) raw - 5 else raw
    }
    println(total)
  }
}

快速检查

检查您对表达式的掌握程度。

回顾

您已经了解到,在 Scala 中几乎所有内容都是表达式:

  • if/else、match 和代码块都会返回值
  • 代码块的值就是其中最后一个表达式的值
  • 产生副作用的表达式返回 Unit(())
  • 函数的最后一个表达式就是其返回值
  • 这可以减少状态修改并提高可组合性
免费开始

用 AI 导师学习 Scala — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
39
课程
143

常见问题解答

「表达式优于语句」课时是免费的吗?

是的 — 「表达式优于语句」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 4 节课。

「表达式优于语句」这节课中我会学到什么?

一切皆为表达式 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「表达式优于语句」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?

能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 REPL
  2. val、var 与类型
  3. 表达式优于语句
  4. 字符串插值
← 返回 Scala for Backend Engineering & Functional Programming