显著缩进
可选大括号
显著缩进 是 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 反馈 — 无需本地设置。