趣味学Rust基础篇(控制流程)
这一节,我将使用生活中的举例,帮你轻松掌握这些核心概念,就像在听一个程序员讲段子。
控制流:你的代码会“思考”和“重复劳动”了!
想象一下,你的 Rust 程序是个聪明的家庭机器人。它不仅能听指令做事,还能判断情况(比如“如果脏了就打扫”),还能重复干活(比如“扫地10遍”)。这种“判断”和“重复”的能力,就叫控制流。
今天我们就来教你的机器人学会两种超能力:条件判断(if) 和 循环干活(loop/while/for)。
一、if
表达式:机器人会“看情况办事”
if
就像你对机器人说:“如果……就……否则……”。
1. 基本用法:简单判断
fn main() {let mood = 3; // 机器人的心情值if mood < 5 {println!("心情不好,需要安慰!");} else {println!("心情很好,继续工作!");}
}
if mood < 5
:如果心情值小于 5else
:否则(心情 ≥ 5)
运行结果:
心情不好,需要安慰!
(因为 3 < 5)
重点1:条件必须是 bool
!不能“模糊判断”
在 Rust 中,条件必须是 true
或 false
,不能是数字、字符串等。
错误示范(像 JavaScript 那样写):
if mood { // 错!mood 是 3,不是 true/falseprintln!("有心情就工作");
}
Rust 会直接报错:“我要 bool
,你给我个数字?不行!”
正确写法:
if mood != 0 { // 明确判断:不等于 0 就干活println!("有心情就工作");
}
比喻:机器人很“死板”,你不能说“如果有钱”(多少钱?),必须说“如果有100块以上”。
2. 多条件判断:else if
—— 机器人也有“优先级”
let energy = 6;if energy % 4 == 0 {println!("精力充沛,可以搬砖!");
} else if energy % 3 == 0 {println!("精力还行,可以扫地!"); // 这句会执行
} else if energy % 2 == 0 {println!("有点累,只能擦桌子");
} else {println!("累瘫了,快充电!");
}
energy = 6
,它能被 3 整除,所以打印“扫地”。- 关键:Rust 一旦找到第一个为
true
的条件,就立刻执行,不再看后面的!
比喻:机器人接到多个任务,它只挑第一个能干的,干完就下班,后面的都不看了。
3. if
是表达式!能“返回值”给变量
在 Rust 中,if
不仅能控制流程,还能像函数一样“返回结果”!
fn main() {let is_weekend = true;let plan = if is_weekend {"去公园野餐" // 注意:没有分号!} else {"在家写代码"}; // 整个 if 是表达式,结果赋给 planprintln!("今天计划:{plan}");
}
输出:
今天计划:去公园野餐
重要规则:所有分支返回的类型必须一致!
let plan = if is_weekend { 5 } else { "休息" }; // 错!一个是数字,一个是字符串
比喻:机器人只能给你一种“结果”——要么是“野餐计划”,要么是“代码计划”,不能一半计划一半数字。
二、循环:让机器人“重复劳动”
机器人最擅长的就是重复干活。Rust 有三种循环方式:
1. loop
:无限循环,直到你喊“停!”
fn main() {loop {println!("打工!打工!");}
}
这就像机器人开启了“永动机”模式,会一直打印“打工!打工!”,直到你按 Ctrl+C
强制关机。
如何优雅地退出?用 break
let mut count = 0;let result = loop {count += 1;if count == 5 {break count * 2; // 跳出循环,并返回 10}
};println!("结果是:{result}"); // 输出:结果是:10
比喻:机器人每搬一块砖就记一次数,搬够 5 块就喊“完成!”,并把“工作量”(10)汇报给你。
continue
:跳过本次,继续下一次
let mut n = 0;
loop {n += 1;if n % 2 == 0 {continue; // 如果是偶数,跳过,不打印}if n > 5 {break;}println!("{n}"); // 只打印奇数
}
输出:
1
3
5
2. while
:当……条件成立时,一直干!
while
就是“当……的时候,一直重复”。
场景1:倒计时发射!
let mut countdown = 3;while countdown != 0 {println!("{countdown}...");countdown -= 1;
}println!("LIFTOFF!!!");
输出:
3... 2... 1... LIFTOFF!!!
场景2:遍历数组(但容易出错!)
let numbers = [10, 20, 30, 40, 50];
let mut index = 0;while index < numbers.len() {println!("数字是:{}", numbers[index]);index += 1;
}
风险:容易忘记
index += 1
导致死循环,或越界访问。
3. for
循环:最安全、最优雅的遍历方式
for
循环是 Rust 的“明星选手”,安全又高效!
遍历数组
let numbers = [10, 20, 30, 40, 50];for num in numbers {println!("数字是:{num}");
}
输出:10, 20, 30, 40, 50
优点:不用管索引,不会越界,代码更短更安全!
倒计时(更优雅的写法)
for count in (1..4).rev() { // 1..4 是 1,2,3;.rev() 反转成 3,2,1println!("{count}!");
}
println!("LIFTOFF!!!");
输出:
3! 2! 1! LIFTOFF!!!
比
while
更简洁,更不易出错!
总结:控制流口诀
控制流 | 关键词 | 口诀 | 适用场景 |
---|---|---|---|
条件判断 | if / else if / else | “如果……就……否则……” | 做选择题 |
无限循环 | loop + break /continue | “一直干,直到喊停” | 重试操作、等待信号 |
条件循环 | while | “当……时,一直干” | 计数、状态检查 |
遍历集合 | for | “把每个都过一遍” | 遍历数组、列表(首选!) |
if
条件必须是bool
,不能是数字或字符串。if
是表达式,可以赋值给变量,但所有分支返回类型必须一致。- 遍历集合,优先用
for
,安全又省心!