Scala 循环控制:掌握 while 和 for 循环

引言

在编程世界中,循环是让代码重复执行的关键工具。Scala 作为一门现代编程语言,提供了灵活而强大的循环结构。本文将带你深入探索 Scala 中的 while 循环和 for 循环,从基础用法到高级特性,帮助你编写更高效、更优雅的代码。


目录


while 循环

while 循环是最基本的循环结构,它会在条件为真时重复执行代码块。

scala 复制代码
var i = 10
while i > 0 do
    println(i)  // 输出当前值
    i -= 1      // 递减计数器

当循环体有多行代码时,为了提高可读性,我们可以使用 end 关键字来明确标记循环的结束。

scala 复制代码
var i = 10
while i > 0 do
    println(i)
    i -= 1
end while

for 循环基础

for 循环在 Scala 中非常强大,支持多种用法。让我们从基础开始。

scala 复制代码
for i <- 1 to 10 do
    r = r * i  // 注意:这里假设 r 已定义,用于累积结果

在遍历字符串时,你可以使用索引:

scala 复制代码
for c <- 0 until "string".length do
    println(c)  // 输出索引

实际上,更简洁的方式是直接遍历字符串中的每个字符:

scala 复制代码
for c <- "string" do
    println(c)  // 输出每个字符

for 循环高级特性

多重生成器

for 循环允许存在多个生成器,每个生成器都可以依赖于前面的生成器。

scala 复制代码
for
    i <- 1 to 10
    j <- 1 to i
do
    println(i * j)

如果存在多个生成器,推荐在一行中使用分号分隔,而不是换行:

scala 复制代码
for i <- 1 to 10; j <- 1 to i do
    println(i * j)

条件守卫

for 循环支持条件守卫(也称为过滤器),只有满足条件的元素才会执行循环体。

scala 复制代码
for i <- 1 to 10 if i % 2 == 0 do
    println(i)  // 只输出偶数

yield 表达式

使用 yield 可以将每次循环的结果收集起来,最后返回一个集合。这种循环也叫做 for 推导式。

scala 复制代码
val res = for i <- 1 to 10 yield i * i
// 产生 Vector(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

生成的集合类型与生成器的类型兼容:

scala 复制代码
val ret = for c <- "hello" yield (c + 1).toChar
println(ret)  // 输出 ifmmp

注意事项

  • Scala 没有 breakcontinue 关键字。如果需要中断循环,可以使用 Breakable
scala 复制代码
import scala.util.control.Breaks._
breakable {
    for i <- 1 to 10 do
        if i == 5 then
            break
        else
            println(i)
}

注意,这种方式通过抛出和捕获异常实现,不推荐在日常代码中使用。

总结

掌握 Scala 的循环结构是编写高效代码的基础。从简单的 while 循环到功能丰富的 for 循环,Scala 提供了多种工具来处理重复任务。良好的循环设计不仅提高代码可读性,还能提升性能。

相关推荐
九河云1 天前
数字韧性时代,华为云CBR为业务连续性注入“免疫基因”
大数据·人工智能·安全·机器学习·华为云
Juicedata1 天前
JuiceFS 企业版 5.3 特性详解:单文件系统支持超 5,000 亿文件,首次引入 RDMA
大数据·人工智能·机器学习·性能优化·开源
2501_944525541 天前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
蚁巡信息巡查系统1 天前
网站信息发布再巡查机制怎么建立?
大数据·人工智能·数据挖掘·内容运营
1 天前
java关于内部类
java·开发语言
好好沉淀1 天前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
lsx2024061 天前
FastAPI 交互式 API 文档
开发语言
云边云科技_云网融合1 天前
AIoT智能物联网平台:架构解析与边缘应用新图景
大数据·网络·人工智能·安全
VCR__1 天前
python第三次作业
开发语言·python
码农水水1 天前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展