主题
Rust 控制流完整学习总结
本文基于实际代码学习过程,总结 Rust 中常见控制流结构:
if / loop / while / for / continue / break / match并给出一套清晰的选择心智模型。
一、if:在 Rust 中是「表达式」
Rust 的 if 可以返回值,这与很多语言不同。
rust
let a: i32 = 3;
let b = if a > 5 {
1
} else if a >= 3 {
3
} else {
6
};
println!("b {}", b);关键规则
if的每个分支 必须返回同一类型- 结尾没有
; if可以嵌套,但不适合复杂分支
二、loop:最底层、最强的循环结构
rust
loop {
println!("loop");
break;
}特点
- 默认无限循环
- 一切退出都靠
break - 是 Rust 中最“原始”的循环
三、带标签的 loop:精确控制跳出层级
rust
'outer: loop {
println!("进入外层 loop");
loop {
println!("进入内层 loop");
break 'outer;
}
}
println!("退出外层循环");心智模型
- label 是 跳转目标
break 'label= 直接跳到指定层级之外- 非常适合嵌套状态控制
四、loop 可以返回值
rust
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("result {}", result);👉 loop 在 Rust 中,本质上是一个表达式
五、continue:跳过本轮,进入下一轮
rust
loop {
if some_condition {
continue;
}
// 只有条件不满足时才会执行到这里
}核心语义
- 结束当前这一轮
- 不会退出循环
- 与
break完全不同
六、while:条件驱动的循环
rust
let mut n = 1;
while n < 101 {
println!("{}", n);
n += 1;
}本质理解
- 每一轮开始前判断条件
- 条件为
false时自动退出 - 通常需要手动维护变量
while + continue 示例(FizzBuzz)
rust
let mut n = 1;
while n < 101 {
if n % 15 == 0 {
println!("fizzbuzz");
n += 1;
continue;
}
if n % 3 == 0 {
println!("fizz");
n += 1;
continue;
}
if n % 5 == 0 {
println!("buzz");
n += 1;
continue;
}
println!("{}", n);
n += 1;
}while 的适用边界
✅ 适合:
- 条件清晰
- 退出规则单一
❌ 不适合:
- 多状态切换
- 多个 break / continue
👉 这种情况下,应转向 loop + match
七、for:遍历驱动的循环
rust
let arr = [1, 2, 3, 4, 5, 6];
for i in arr {
println!("arr {}", i);
}rust
for number in (1..4).rev() {
println!("{number}!");
}
println!("LIFTOFF!!!");特点
- 自动处理边界
- 不需要索引
- 最安全、最推荐
八、match:Rust 的核心控制结构
基础用法
rust
let x = 3;
match x {
1 => println!("one"),
2 | 3 => println!("two or three"),
_ => println!("other"),
}模式匹配能力
1️⃣ _:兜底分支
rust
_ => {}2️⃣ 范围匹配
rust
match x {
1..=5 => println!("small"),
_ => println!("large"),
}3️⃣ 解构匹配
rust
let tuple = (1, 2);
match tuple {
(1, y) => println!("y = {}", y),
_ => {}
}九、用 loop + match 重写复杂逻辑
rust
let mut n = 1;
loop {
match n {
1..=100 if n % 15 == 0 => println!("fizzbuzz"),
1..=100 if n % 3 == 0 => println!("fizz"),
1..=100 if n % 5 == 0 => println!("buzz"),
1..=100 => println!("{}", n),
_ => break,
}
n += 1;
}👉 状态集中、逻辑清晰、无重复 continue
十、什么时候用 if,什么时候用 match?
✅ 用 if
- 判断条件少
- 逻辑是「是 / 否」
- 临时、局部判断
✅ 用 match
- 多分支
- 有枚举 / 状态
- 需要穷尽所有情况
经验法则: 当
else if超过 2 个,就该考虑match
总结一句话
if适合判断,while适合条件循环,for适合遍历,loop + match才是 Rust 的最终形态。
这套控制流,是 Rust 写出安全、可维护、状态清晰代码的根基。