各位代码循环侠们,今天咱们来聊聊 Rust 里的 "重复劳动专家"—— 循环结构。想象一下,如果生活没有循环,你每天都得重新学习走路、吃饭、打游戏,多累啊!程序里的循环也是一个道理,帮你把重复的活儿干得又快又好。
先认识三位循环大佬
- loop 循环:死磕到底型选手,不喊停就一直干(像追剧停不下来的你)
- while 循环:看心情干活型,条件满足就继续(像 "只要没下雨就坚持晨跑")
- for 循环:按清单办事型,把列表里的任务一个个做完(像 "把购物车里的东西逐个结账")
还有两个小助手:
- break:紧急刹车,立刻终止循环(像游戏里突然断电)
- continue:跳过当前回合,直接开始下一轮(像吃火锅时夹到花椒,吐掉继续吃)
实战开始!先建个项目
打开终端,输入这两行,创建一个叫loop_fun的项目:
bash
cargo new loop_fun
cd loop_fun
之后所有代码都写在src/main.rs里,每次改完运行cargo run就行,就是这么简单!
1. loop 循环:停不下来的 "追剧模式"
loop 是最执着的循环,不手动叫停就会无限循环。就像你看剧时 "再看一集就睡",结果连刷到天亮 —— 必须手动关播放器(break)才能停。
案例 1:用 loop 实现 "倒计时"
rust
fn main() {
let mut count = 3;
loop {
println!("倒计时: {}", count);
count -= 1;
// 当count变成0时,触发break终止循环
if count == 0 {
println!("发射!");
break; // 紧急刹车
}
}
}
运行结果:
plaintext
倒计时: 3
倒计时: 2
倒计时: 1
发射!
这就像火箭发射前的倒计时,数到 0 就必须停下并执行下一步,break 在这里就是那个 "发射" 指令。
案例 2:loop 也能当 "计算器"(带返回值)
Rust 的 loop 很聪明,还能返回值,就像自动贩卖机,循环补货直到你投币,然后吐出你要的饮料:
rust
fn main() {
let mut money = 0;
let price = 5;
// loop像个自动贩卖机,返回买到的东西
let drink = loop {
money += 1;
println!("投了{}块钱", money);
if money >= price {
// 钱够了,返回饮料并退出
break "可乐";
}
};
println!("买到了:{}", drink);
}
运行结果:
plaintext
投了1块钱
投了2块钱
投了3块钱
投了4块钱
投了5块钱
买到了:可乐
2. while 循环:"看天气出门" 模式
while 循环就像 "只要不下雨就去散步",条件满足就继续,不满足就回家。比 loop 灵活,自带条件判断。
案例 3:用 while 实现 "猜数字"(带 continue)
rust
fn main() {
let secret_number = 7;
let mut guess = 0;
while guess != secret_number {
guess += 1;
// 如果是偶数就跳过(continue的作用)
if guess % 2 == 0 {
println!("猜了偶数{},跳过", guess);
continue; // 跳过当前循环,直接开始下一轮
}
println!("正在猜:{}", guess);
}
println!("猜对了!答案是{}", guess);
}
运行结果:
plaintext
正在猜:1
猜了偶数2,跳过
正在猜:3
猜了偶数4,跳过
正在猜:5
猜了偶数6,跳过
正在猜:7
猜对了!答案是7
这里的 continue 就像玩游戏时遇到障碍物,直接绕过去不纠结,效率杠杠的。
案例 4:while 处理 "吃零食" 场景
rust
fn main() {
let mut snacks = 5; // 有5包零食
while snacks > 0 {
snacks -= 1;
// 最后一包留着明天吃
if snacks == 0 {
println!("留一包明天吃~");
break;
}
println!("吃掉1包,还剩{}包", snacks);
}
}
运行结果:
plaintext
吃掉1包,还剩3包
吃掉1包,还剩2包
吃掉1包,还剩1包
吃掉1包,还剩0包
留一包明天吃~
3. for 循环:"按清单办事" 模式
for 循环最擅长处理 "列表任务",就像按购物清单买东西,一个个来,绝不漏项也不重复。在 Rust 里,for 循环是处理集合的首选,安全又高效。
案例 5:遍历范围(1 到 10)
rust
fn main() {
// 遍历1..=10(包含10),就像从1数到10
for i in 1..=10 {
println!("第{}步", i);
}
println!("完成10步!");
}
运行结果会从 "第 1 步" 一直数到 "第 10 步",完美模拟做健身操的节奏。
案例 6:遍历数组(处理批量数据)
rust
fn main() {
let fruits = ["苹果", "香蕉", "橙子", "西瓜"];
// 遍历水果数组,就像盘点冰箱里的存货
for fruit in fruits {
// 跳过香蕉(假设有人不爱吃)
if fruit == "香蕉" {
continue;
}
println!("我喜欢吃{}", fruit);
}
}
运行结果:
plaintext
我喜欢吃苹果
我喜欢吃橙子
我喜欢吃西瓜
案例 7:反向遍历(倒着来)
rust
fn main() {
// (1..=5).rev() 表示从5倒着数到1
for i in (1..=5).rev() {
println!("倒计时{}秒", i);
}
println!("时间到!");
}
这就像比赛前的倒计时,rev () 方法帮你把顺序倒过来,贴心吧~
循环中断小技巧
- break:紧急出口,不管后面还有多少任务,立刻终止整个循环
- break value:不仅退出,还能带回一个值(仅限 loop)
- continue:局部跳过,当前任务不干了,直接开始下一个
就像打游戏:
- break = 直接退出游戏
- continue = 这关太难,跳过玩下一关
两个标题
- 《Rust 循环秘籍:从停不下来的 loop 到按清单办事的 for》
- 《学 Rust 循环,像追剧、逛街一样简单》
简介
本文用生活化的类比(追剧、购物、倒计时)通俗讲解 Rust 中的 loop、while、for 三种循环结构,以及 break 和 continue 的用法。通过多个完整案例展示循环的实际应用,包含详细的项目创建和运行步骤,让你轻松掌握 Rust 的循环逻辑,从此和重复代码说再见。
关键词
#Rust #循环结构 #loop #while #for