Rust基础学习(三)——控制流

控制流(Control Flow)
控制流(Control Flow
)指的是程序执行代码的顺序控制机制,它允许开发者根据条件或循环逻辑决定代码的执行路径。Rust的控制流与其他编程语言类似,但具有更严格的类型安全和表达式特性。最常见控制流结构是if表达式和循环。
if表达式
if
表达式允许你根据条件来分支代码,与if
表达式中条件关联的代码块一般被称为分支(arm
)
1 | // 若condition的值为true,则执行A代码,否则执行B代码 |
再看下述代码:
1 | fn main() |
注意:
if
语句块是表达式,这里我们使用if
表达式的返回值来给number
进行赋值- 使用
if
表达式赋值时,通常要求所有分支返回的类型一致,否则会编译错误(特例:分支返回发散类型时,即使与其他分支返回类型不同,也可以通过编译) if
的条件必须是bool类型,否则会编译报错1
2
3
4
5
6
7
8
9
10// 此段代码编译失败
fn main()
{
let number = 3;
if number
{
println!("number was three");
}
}
使用else if处理多重条件
可以通过将else if
与if
和else
结合来处理多重条件。
1 | fn main() |
程序执行时,会依次检查每个if
表达式,并执行第一个条件为真的代码块。注意,尽管6可以被2整除,但我们没有看到输出number is divisible by 2
,这是因为Rust只会执行第一个条件为真的代码块,一旦找到这样的条件,它便不会再检查其余的条件。
使用大量的else if
表达式会使代码变得非常丑陋。后面将介绍一种强大的Rust分支结构match,专门用来解决多分支模式匹配的问题。
循环(Loop)
Rust有三种循环:loop
、while
和for
。
重复循环loop
loop
关键字告诉Rust无限重复执行某段代码,直到你明确告诉它停止。
1 | // 不建议运行此段代码 |
当运行上述代码时,会看到again!
被不停地打印,直到我们手动停止程序。大多数终端支持键盘快捷键ctrl-c
来中断程序。
Rust还提供了一种通过代码跳出循环的方式。你可以在循环中使用break
关键字来告诉程序何时停止执行循环,并将结果传递到循环外部(loop
是一个表达式,因此可以返回一个值)。
1 | fn main() |
注意:
- break可以单独使用,也可以后面跟一个返回值
- break跳出当前循环,而
return
是直接退出当前函数
循环标签(Loop Label)
循环标签用于消除多层循环间的歧义,如果在循环中嵌套了其他循环,break
和continue
默认作用于最内层的循环。你可以选择为循环指定一个循环标签,然后与break
或continue
一起使用,这样可以让这些关键字作用于具有特定标签的循环,而不是最内层的循环。循环标签必须以单引号开头。以下是一个包含两层嵌套循环的示例:
1 | fn main() |
输出:
1 | $ cargo run |
条件循环while
while
关键字会评估某个条件,当条件为真时,循环继续运行;当条件不再为真时,跳出循环。
1 | fn main() |
其实等价于
1 | fn main() |
只不过使用while
要简洁的多
while
结构也可以用来遍历集合(例如数组)中的元素:
1 | fn main() |
在这段代码中,程序按数组元素计数。它从索引0开始,然后循环直到达到数组的最后一个索引(即当index < 5
不再为真时)。运行这段代码将打印数组中的每个元素:
1 | $ cargo run |
然而,这种方法容易出错:如果索引值或测试条件不正确,我们可能会导致程序崩溃。例如,如果你将数组a的定义更改为只有四个元素,但忘记将条件更新为while index < 4
,代码将会崩溃。此外,这种方法速度较慢,因为编译器在每次循环迭代时都会添加运行时代码来检查索引是否在数组的边界内。
对于上述情况,有一种更简洁的替代方案:for
循环
遍历循环for
for
关键字用来遍历集合中的每个元素并执行一些代码。
1 | fn main() |
相较于while
的形式,for
循环消除了由于超出数组范围或未遍历到足够远而遗漏某些项而导致错误的可能性,更佳的安全和简洁。
以下是使用for
循环和rev
方法(尚未讨论)来实现倒计时的代码:
1 | fn main() |
参考文章
- 标题: Rust基础学习(三)——控制流
- 作者: paw5zx
- 创建于 : 2025-02-09 09:48:10
- 更新于 : 2025-02-09 17:29:09
- 链接: https://paw5zx.github.io/rust-common-concepts-3/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。