尧图精选

Comprehensive Rust 课程实战:深入掌握 Rust 三大循环结构 while、loop 与 for

🕒 发布时间:2026/9/10 21:54:39 📁 来源:尧图网络
Comprehensive Rust 课程实战深入掌握 Rust 三大循环结构 while、loop 与 for【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rust本指南聚焦 Google Comprehensive Rust 课程Android 团队使用的 Rust 培训教材中控制流基础章节的核心主题——Rust 的三种循环关键字while、loop和for。读完本文你将掌握三种循环的适用场景、break/continue控制转移、带标签跳出嵌套循环、loop表达式求值等关键能力并能用 while 循环完成 Collatz 序列等实战练习。Rust 三种循环关键字总览Rust 提供三种循环关键字while、loop和for。它们各自有不同的适用场景关键字特点典型场景while条件为真时反复执行循环体基于条件迭代、数值递减loop无限循环直到break显式退出服务器、事件循环、重试逻辑for遍历范围或集合中的元素数组、切片、Range迭代在课程目录结构src/SUMMARY.md中loops章节细分为三个子主题for、loop和带标签的break/continue可见课程对每种循环都安排了独立的深度讲解。while条件驱动循环while与其他语言的工作方式类似只要条件为真就持续执行循环体。课程给出的经典示例是不断将数值减半直到小于阈值fn main() { let mut x 200; while x 10 { x x / 2; } dbg!(x); }运行过程x依次变为 100、50、25、12、6当x 6时不满足x 10循环终止最终打印x 6。注意while的语法约定条件必须是bool类型Rust 不会像 C 语言那样隐式把非零整数当作真值while循环体通常用{}包裹且表达式末尾的分号不可省略。for范围与集合迭代for循环遍历值范围或集合中的元素。课程示例展示了两种遍历对象fn main() { for x in 1..5 { dbg!(x); } for elem in [2, 4, 8, 16, 32] { dbg!(elem); } }两个关键细节范围是半开区间1..5表示1, 2, 3, 4不包含5。若要包含上界需使用闭区间语法1..5即1, 2, 3, 4, 5。底层机制是迭代器Iteratorfor循环底层调用迭代器协议来遍历不同类型的范围与集合。迭代器是 Rust 抽象层级极高的概念后续课程src/iterators/iterator.md会单独深入讲解此处只需理解for x in range的便捷用法。loop无限循环与显式退出loop语句会一直循环直到遇到break。课程示例用计数器展示这一模式fn main() { let mut i 0; loop { i 1; dbg!(i); if i 100 { break; } } }loop的行为等价于while true但比后者更直观适合需要永远运行的场景——例如持续接受连接的服务器、事件循环、或反复尝试直到成功的重试逻辑。由于loop天然表达无限执行的意图编译器与读者都能立刻明白这是一个刻意设计的永续循环而非条件判断的疏漏。break与continue循环控制流continue立即开始下一轮迭代continue跳过当前迭代剩余的代码立即进入下一轮。break提前退出任意循环break可提前退出任何类型的循环while、loop、for。对于loopbreak还可以携带一个可选表达式使其成为整个loop表达式的值。课程综合示例同时演示两者fn main() { let mut i 0; loop { i 1; if i 5 { break; } if i % 2 0 { continue; } dbg!(i); } }执行轨迹i从 1 递增到 5奇数1、3、5被dbg!打印偶数触发continue跳过打印i 6时break退出。最终输出 1、3、5。loop是唯一能返回非平凡值的循环这是 Rust 的一个独特设计loop是唯一可以返回非平凡值的循环结构。原因在于loop保证只会通过break语句返回——while和for还可能因条件不满足或集合耗尽而正常结束它们的退出路径无法统一成一个值。典型写法let guess loop { let input get_input(); if let Ok(v) parse(input) { break v; // break 携带的值即 loop 表达式的值 } };带标签的break与continue跳出嵌套循环continue和break都可以接受一个可选的标签参数用于从嵌套循环中跳出指定层。标签以单引号开头如outer:。课程用二维数组搜索演示这一能力fn main() { let s [[5, 6, 7], [8, 9, 10], [21, 15, 32]]; let mut elements_searched 0; let target_value 10; outer: for i in 0..2 { for j in 0..2 { elements_searched 1; if s[i][j] target_value { break outer; } } } dbg!(elements_searched); }当内层循环在s[1][2]找到目标值 10 时break outer直接跳出外层循环共搜索了 6 个元素。若使用普通break则只能跳出内层for j循环外层循环仍会继续导致搜索次数远多于必要值。标签的另一种用法带标签的break也可以作用于任意代码块不仅限于循环label: { break label; println!(This line gets skipped); }这可以用于提前跳过一大段代码块是一种受控 goto式的结构化解法。实战练习用while实现 Collatz 序列课程配套练习要求用循环实现 Collatz 序列长度计算src/control-flow-basics/exercise.md。Collatz 序列规则对于任意正整数 n若 n 为 1序列终止若 n 为偶数n 变为 n/2若 n 为奇数n 变为 3n 1。例如从 3 开始3 → 10 → 5 → 16 → 8 → 4 → 2 → 1共 8 项。课程提供的参考实现src/control-flow-basics/exercise.rs如下fn collatz_length(mut n: i32) - u32 { let mut len 1; while n 1 { n if n % 2 0 { n / 2 } else { 3 * n 1 }; len 1; } len } fn main() { println!(Length: {}, collatz_length(11)); // should be 15 }这段参考代码还揭示了三个 Rust 进阶特性详见解答文档mut参数mut n使函数内的局部变量n可变但不影响调用方的值整数是Copy类型按值传递if是表达式if n % 2 0 { ... } else { ... }直接产生一个值赋给n比在分支内分别赋值更简洁隐式返回函数末尾的len无分号自动作为返回值。仓库还包含配套的单元测试src/control-flow-basics/exercise.rs#[test] fn test_collatz_length() { assert_eq!(collatz_length(11), 15); }该练习在工程配置中以collatz二进制目标形式组织可通过cargo run --bin collatz运行、cargo test验证结果。求解思路建议先用一个简单固定值如 11逐步推导序列验证实现对后再运行测试如果陷入僵局参考实现放在solution片段中。常见陷阱与进阶提示整数溢出风险Collatz 序列在 n 很大时可能增长极快3n 1 操作i32可能溢出。更健壮的实现可使用u32或对非法输入0 或负数返回Option/Result否则可能出现 panic 或死循环src/control-flow-basics/solution.mdwhile条件必须是布尔值不能写while x非零即真Rust 会编译报错优先用for而非while遍历集合for结合迭代器更符合 Rust 惯用法且不易出现下标越界loop表达式的值需要循环计算结果时优先考虑loopbreak value而不是在循环外用可变变量收集结果。延伸阅读本主题在课程中的完整脉络可继续阅读控制流基础总览if、match、循环与宏的完整体系迭代器深入for底层依赖的迭代器协议与常见组合子所有权与内存管理理解Copy类型与值传递语义是读懂循环中变量绑定行为的前提。若要本地运行这些代码示例可按照课程根目录的 README.md 说明使用mdbook serve启动交互式书籍在可编辑代码块中直接运行验证。【免费下载链接】comprehensive-rustThis is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust.项目地址: https://gitcode.com/GitHub_Trending/co/comprehensive-rust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →