1037 字
5 分钟
study 2day
🧩 Rust 控制流教程
🌱 一、if / else 条件语句
Rust 中的 if 语句非常简洁:
条件必须是布尔表达式(bool),不能是整数(如 1)。
✅ 基本用法
fn main() { let num = 5;
if num > 0 { println!("正数"); } else if num < 0 { println!("负数"); } else { println!("零"); }}输出:
正数✅ if 是表达式(可返回值)
Rust 的 if 可以直接返回一个值(类似三元运算符),
因此可以赋值给变量:
fn main() { let x = 10; let result = if x % 2 == 0 { "even" } else { "odd" };
println!("x 是 {}", result);}输出:
x 是 even⚠️ 注意:
if的所有分支必须返回相同类型!
错误示例:
let val = if true { 5 } else { "hello" }; // ❌ 类型不一致🔁 二、循环语句(loop / while / for)
Rust 提供三种循环方式:
| 类型 | 说明 |
|---|---|
loop | 无限循环,需 break 跳出 |
while | 条件循环 |
for | 迭代循环(最常用) |
1️⃣ loop —— 无限循环
fn main() { let mut count = 0; loop { count += 1; println!("循环中:{}", count);
if count == 3 { println!("跳出循环!"); break; } }}输出:
循环中:1循环中:2循环中:3跳出循环!✅ loop 可返回值(非常 Rust!)
fn main() { let mut count = 0; let result = loop { count += 1; if count == 5 { break count * 2; // 返回值 } }; println!("结果是 {}", result);}输出:
结果是 102️⃣ while —— 条件循环
fn main() { let mut n = 3;
while n > 0 { println!("倒计时: {}", n); n -= 1; }
println!("发射!");}输出:
倒计时: 3倒计时: 2倒计时: 1发射!✅
while在循环前检查条件。 ⚠️ 注意不要陷入死循环(条件永远为真)。
3️⃣ for —— 迭代循环(最常用)
for 用于遍历集合、数组、范围(range)。
📘 遍历范围
fn main() { for i in 1..5 { // 不包含5 println!("i = {}", i); }}输出:
i = 1i = 2i = 3i = 4如果你想包含上限,可以使用 1..=5:
for i in 1..=5 { println!("包含: {}", i);}📗 遍历数组或向量
fn main() { let arr = [10, 20, 30, 40];
for val in arr { println!("元素: {}", val); }}📙 遍历带索引(使用 .iter().enumerate())
fn main() { let names = ["Alice", "Bob", "Charlie"];
for (index, name) in names.iter().enumerate() { println!("第 {} 位: {}", index, name); }}📒 倒序遍历
fn main() { for n in (1..5).rev() { println!("{}!", n); } println!("发射!");}输出:
4!3!2!1!发射!🧱 三、break 与 continue
✅ break 跳出循环
fn main() { for i in 1..10 { if i == 4 { break; } println!("i = {}", i); }}输出:
i = 1i = 2i = 3✅ continue 跳过本次循环
fn main() { for i in 1..6 { if i == 3 { continue; } println!("i = {}", i); }}输出:
i = 1i = 2i = 4i = 5✅ break + 标签(多层循环跳出)
Rust 支持 循环标签(loop label),可指定要跳出的哪一层循环:
fn main() { 'outer: for i in 1..=3 { for j in 1..=3 { if i == 2 && j == 2 { break 'outer; // 跳出外层循环 } println!("i={}, j={}", i, j); } }}输出:
i=1, j=1i=1, j=2i=1, j=3i=2, j=1🧠 四、控制流表达式总结
| 关键字 | 功能 | 可返回值 | 常见场景 |
|---|---|---|---|
if / else | 条件判断 | ✅ 可返回值 | 条件分支、三元替代 |
loop | 无限循环 | ✅ 可返回值 | 事件循环、等待条件 |
while | 条件循环 | ❌ 不返回值 | 普通条件控制 |
for | 迭代集合 | ❌ 不返回值 | 遍历数组、范围 |
break | 跳出循环 | ✅ 可带值(仅 loop) | 提前结束 |
continue | 跳过当前循环 | ❌ | 跳过部分逻辑 |
'label | 命名循环 | ✅ | 嵌套跳出 |
💡 五、练习建议
下面是几个非常好的练习:
-
🧮 FizzBuzz 问题
for i in 1..=20 {if i % 15 == 0 {println!("FizzBuzz");} else if i % 3 == 0 {println!("Fizz");} else if i % 5 == 0 {println!("Buzz");} else {println!("{}", i);}} -
🎯 计算 1~100 的和
let mut sum = 0;for i in 1..=100 {sum += i;}println!("sum = {}", sum); -
🔁 使用 loop 实现 while
let mut n = 5;loop {if n == 0 {break;}println!("n = {}", n);n -= 1;}
📚 六、总结口诀
Rust 控制流:
- 判断用
if,必须是布尔;- 循环有三:
loop无限、while条件、for迭代;if、loop都能返回值;break、continue控制循环流程;- 支持标签跳出多层循环。