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 覆盖重复;loopbreak 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

结合场景再看三个关注点

  1. break 可以带值,让重试循环的结果直接进入绑定。
  2. for 消费迭代器语义(数组在此按值/Copy 元素迭代);后续集合章会扩展。
  3. 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 更直白时别硬写。

工程实践

  1. 重试/状态机优先 loop + 清晰 break 条件。
  2. 遍历集合用 for,手写索引仅在必要时。
  3. 多分支状态映射优先 match,少嵌套 if 金字塔。

本节总结

  • if 是表达式;循环三分法 loop/while/for。
  • break 值是 Rust 循环的特色能力。
  • match 为穷尽模式匹配打基础。

自测题

  1. for i in 1..4 会迭代哪些值?
  2. 为什么 if qty { ... } 在 qty 为整数时不合法?
参考答案
  1. 1、2、3。
  2. 条件必须是 bool,整数不会自动转真假。

延伸阅读与资料来源

资料类型支撑内容
The Book — Control Flow官方书if/loop/while/for
The Book — Match官方书match 深入
创建于 2026/7/15 更新于 2026/7/15