在 Scala 中,循环是控制结构的一部分,用于重复执行代码块。Scala 提供了几种常见的循环结构,如 for
、while
和 do...while
循环。Scala 也注重函数式编程,因此 for
循环等可以与集合操作结合使用,形成更简洁和更高效的循环方式。
📖 目录
1. for
循环
for
循环是最常用的循环结构之一,通常用于遍历集合、数组、范围等数据结构。Scala 的 for
循环也可以作为一个表达式返回一个值,这使得它比许多其他编程语言中的 for
循环更具灵活性。
基本语法:
for (variable <- collection) {
// 每次迭代时执行的代码
}
示例:
val numbers = List(1, 2, 3, 4, 5)
for (num <- numbers) {
println(num)
}
输出:
1
2
3
4
5
在这个例子中,for
循环遍历了 numbers
列表中的每个元素,并将其打印出来。
2. while
循环
while
循环在给定的条件为 true
时不断执行循环体。它的语法格式是:
基本语法:
while (condition) {
// 条件为 true 时执行的代码
}
示例:
var i = 0
while (i < 5) {
println(i)
i += 1
}
输出:
0
1
2
3
4
在这个例子中,while
循环会一直执行,直到 i
的值达到 5 为止。
3. do...while
循环
do...while
循环与 while
循环类似,不同的是,do...while
循环会先执行一次循环体,然后再判断条件是否成立。因此,无论条件是否为 true
,循环体至少执行一次。
基本语法:
do {
// 循环体代码
} while (condition)
示例:
var i = 0
do {
println(i)
i += 1
} while (i < 5)
输出:
0
1
2
3
4
这个例子展示了 do...while
循环的使用方式。无论初始值如何,循环体至少执行一次。
4. 增强的 for
循环
Scala 的 for
循环支持一些额外的功能,比如过滤条件和多变量绑定。增强的 for
循环可以让你在遍历集合时进行更复杂的操作。
示例:
使用过滤条件:
val numbers = List(1, 2, 3, 4, 5, 6)
for (num <- numbers if num % 2 == 0) {
println(num)
}
输出:
2
4
6
多变量绑定:
val pairs = List((1, "one"), (2, "two"), (3, "three"))
for ((num, word) <- pairs) {
println(s"Number: $num, Word: $word")
}
输出:
Number: 1, Word: one
Number: 2, Word: two
Number: 3, Word: three
在这个例子中,for
循环遍历了 pairs
列表中的元组,并分别解构元组中的元素,赋值给 num
和 word
。
生成新集合:
Scala 的 for
循环可以作为一个表达式,返回一个新集合:
val numbers = List(1, 2, 3, 4, 5)
val doubled = for (n <- numbers) yield n * 2
println(doubled) // 输出:List(2, 4, 6, 8, 10)
这里,yield
用于生成一个新集合,其中每个元素都是原始集合元素的两倍。
5. break
和 continue
Scala 默认没有 break
和 continue
语句,但可以通过其他方式来模拟它们的行为。常见的方法是使用 @annotation.tailrec
注解,或通过 breakable
块来模拟 break
行为。
使用 breakable
模拟 break
:
import scala.util.control.Breaks._
val numbers = List(1, 2, 3, 4, 5)
breakable {
for (num <- numbers) {
if (num == 3) break()
println(num)
}
}
输出:
1
2
在这个例子中,程序在遇到数字 3
时退出了循环,模拟了 break
的行为。
模拟 continue
:
Scala 没有 continue
,但可以通过 if
语句跳过当前迭代。
val numbers = List(1, 2, 3, 4, 5)
for (num <- numbers) {
if (num == 3) {
// 跳过当前循环
// continue 相当于不执行后面的代码
println("Skipping 3")
// 使用 return 跳过当前循环
} else {
println(num)
}
}
输出:
1
2
Skipping 3
4
5
6. 参考资料
Scala 的循环结构提供了丰富的功能,允许开发者在函数式编程风格下高效地操作数据集合。通过增强的 for
循环、过滤器、yield
等功能,Scala 的循环结构可以非常简洁地表达复杂的逻辑。
发表回复