Rust 流程控制
Rust 的 if 表达式、loop/while/for 循环、break/continue 带值返回,以及 match 入门。
#type / concept
#status / growing
#tech / dev
#resource / rust
[!info] 关联笔记
Rust 流程控制
这个概念为什么出现
程序要在“分支与重复”中推进业务:
- 条件如何写成表达式?
- 无限循环如何优雅退出并带出值?
for遍历的是什么?- 为什么
match强调穷尽?
[!abstract] 一句话理解
if是表达式;loop/while/for覆盖重复;loop的break value可返回值;match对模式做穷尽分发,是枚举处理的主路径。
最小可运行示例
场景:仓储任务——重试拉取库存,成功后汇总 SKU 列表
同步任务要从本地列表汇总在架 SKU 数;对“服务未就绪”用 loop 重试有限次;最后用 for 遍历。
(真实网络重试会用错误类型与退避;这里钉死控制流形态。)
// 业务意图:
// 1. 最多重试 3 次直到服务就绪标志为 true;
// 2. 遍历 SKU 列表统计在架数量。
// 教学点:
// - loop + break 值;
// - if 表达式;
// - for 遍历数组。
fn wait_until_ready(mut attempts_left: u32) -> bool {
loop {
if attempts_left == 0 {
break false; // loop 可以作为表达式产出 false
}
// 模拟:最后一次尝试才就绪
attempts_left -= 1;
if attempts_left == 0 {
break true;
}
}
}
fn main() {
let ready = wait_until_ready(3);
let status = if ready { "ready" } else { "down" };
println!("service={status}");
let skus_on_shelf = [true, false, true, true];
let mut on_shelf_count = 0;
for flag in skus_on_shelf {
if flag {
on_shelf_count += 1;
}
}
println!("on_shelf_count={on_shelf_count}");
// match 入门:把状态码映射成文案
let code = 200;
let label = match code {
200 => "ok",
404 => "missing",
_ => "other",
};
println!("http={label}");
}
建议运行:
cargo run
期望输出:
service=ready
on_shelf_count=3
http=ok
结合场景再看三个关注点
break可以带值,让重试循环的结果直接进入绑定。for消费迭代器语义(数组在此按值/Copy元素迭代);后续集合章会扩展。match的_是显式兜底,避免漏分支。
核心概念与准确模型
if / else if / else
- 条件必须是
bool(不会把数字当真假) - 作为表达式时各分支类型一致
loop
- 无限循环,直到
break break expr使loop表达式得到expr
while
- 条件为真则重复
- 适合“条件在循环前可知”
for
for x in iterable- 底层是
IntoIterator - 常用于范围:
for i in 0..3(右开)、0..=3(右闭)
continue / break
continue进入下一轮break离开循环;在loop中可带返回值
match 入门
match value {
pattern1 => expr1,
pattern2 => expr2,
_ => expr_default,
}
- 必须穷尽
- 与枚举深度绑定(枚举与模式匹配)
边界情况与反直觉行为
- 没有自动真值转换:
if 1非法。 ..与..=语义不同。- 标签循环(
'outer: loop)用于多层 break,属进阶可读性工具。 - while let / if let 是模式语法糖,处理
Option时很常见。
常见误区
[!warning] 常见误区:用 loop + 可变标志模拟 while 错误理解:只有一种循环。
正确模型:选语义最贴的循环;loop适合重试/状态机,while/for 更直白时别硬写。
工程实践
- 重试/状态机优先
loop+ 清晰 break 条件。 - 遍历集合用
for,手写索引仅在必要时。 - 多分支状态映射优先
match,少嵌套 if 金字塔。
本节总结
- if 是表达式;循环三分法 loop/while/for。
- break 值是 Rust 循环的特色能力。
- match 为穷尽模式匹配打基础。
自测题
for i in 1..4会迭代哪些值?- 为什么
if qty { ... }在 qty 为整数时不合法?
参考答案
- 1、2、3。
- 条件必须是 bool,整数不会自动转真假。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| The Book — Control Flow | 官方书 | if/loop/while/for |
| The Book — Match | 官方书 | match 深入 |