0Pricing
Scala for Backend Engineering & Functional Programming · 课时

显著缩进

可选大括号

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

可选大括号

Scala 3 引入了有意义的缩进,也称为可选大括号语法。您可以使用缩进来界定代码块,而不必用 { } 包裹代码块。

  • 大括号仍然可以使用,并且完全有效。
  • 基于缩进的代码更简洁,风格类似 Python。
object Main:
  def main(args: Array[String]): Unit =
    println("No braces needed")

缩进的方法体

跟在 = 后面的方法体可以是缩进代码块。处于同一缩进层级的每条语句都属于该方法体。

最后一个表达式就是返回值。

object Main:
  def square(x: Int): Int =
    val result = x * x
    result

  def main(args: Array[String]): Unit =
    println(square(5))

缩进的 if 表达式

控制结构使用新的简洁语法。在 if cond then 后缩进分支,并让 else 与 if 对齐。

  • 在无大括号风格中必须使用 then。
  • 条件外不需要括号。
object Main:
  def main(args: Array[String]): Unit =
    val n = 7
    val label =
      if n % 2 == 0 then "even"
      else "odd"
    println(label)

缩进的 for 循环

for 循环使用 do 执行副作用操作,或使用 yield 构建集合;两者都配合缩进使用。

object Main:
  def main(args: Array[String]): Unit =
    for i <- 1 to 3 do
      println(s"line $i")

    val doubled =
      for i <- 1 to 3 yield i * 2
    println(doubled)

缩进的 while 循环

while 循环在 do 后接一个缩进代码块,这属于可选大括号风格。

object Main:
  def main(args: Array[String]): Unit =
    var i = 0
    while i < 3 do
      println(s"i = $i")
      i += 1

缩进的 match 表达式

模式匹配天然适合使用缩进。case 子句会缩进到 match 下方。

object Main:
  def describe(n: Int): String =
    n match
      case 0 => "zero"
      case 1 => "one"
      case _ => "many"

  def main(args: Array[String]): Unit =
    println(describe(1))
    println(describe(9))

类和特质的主体

类、特质和对象也可以省略大括号。在声明头后加冒号 : 即可开启缩进主体。

class Point(x: Int, y: Int):
  def show: String = s"($x, $y)"

object Main:
  def main(args: Array[String]): Unit =
    println(Point(2, 3).show)

end 标记

对于较长的缩进代码块,您可以添加end 标记,以明确声明结束的位置。这会提高大型方法或类的可读性。

  • 形式:end <name>,或 end if、end while 等。
  • 它是可选的,并由编译器检查。
object Main:
  def greet(name: String): String =
    val msg = s"Hello, $name"
    msg
  end greet

  def main(args: Array[String]): Unit =
    println(greet("Ada"))
  end main
end Main

混用大括号和缩进

您可以自由混用这两种风格。有些团队会在嵌套场景中保留大括号以提高可读性。只有在没有大括号的地方才会强制执行缩进规则。

object Main:
  def main(args: Array[String]): Unit = {
    val xs = List(1, 2, 3)
    val total =
      xs.foldLeft(0)((acc, x) => acc + x)
    println(total)
  }

常见的缩进问题

缩进具有语义,因此请保持一致。

  • 使用空格,不要混用制表符和空格。
  • 一行代码对齐错误,可能会悄无声息地落在代码块之外。
  • 模板主体(类/对象)需要冒号 :,但 = 后的方法体不需要。
object Main:
  def main(args: Array[String]): Unit =
    val items = List("a", "b")
    items.foreach: item =>
      println(item.toUpperCase)

更少大括号的参数语法

Scala 3 还允许在冒号后传入代码块参数。items.foreach: x => 会开启一个缩进的 lambda 主体,避免嵌套括号和大括号。

object Main:
  def main(args: Array[String]): Unit =
    val nums = List(1, 2, 3, 4)
    val evens = nums.filter: n =>
      n % 2 == 0
    println(evens)

快速检查

检验您对有意义缩进的理解。

回顾

您学习了 Scala 3 的有意义缩进。

  • 代码块可以使用缩进代替 { }。
  • 控制结构使用 then、do 和 yield。
  • 类/对象/特质主体使用冒号 : 开始。
  • end 标记可以明确长代码块的结束位置。
  • 两种风格可以混用;请保持空格使用一致。
object Main:
  def main(args: Array[String]): Unit =
    for i <- 1 to 2 do
      if i == 1 then println("first")
      else println("second")
  end main
end Main

常见问题解答

「显著缩进」课时是免费的吗?

是的 — 「显著缩进」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 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 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「显著缩进」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 显著缩进
  2. Scala 3 中的枚举
  3. 不透明类型
  4. 联合类型与交集类型
← 返回 Scala for Backend Engineering & Functional Programming