1037 字
5 分钟
study 2day
2025-11-03

🧩 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);
}

输出:

结果是 10

2️⃣ 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 = 1
i = 2
i = 3
i = 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!
发射!

🧱 三、breakcontinue#

break 跳出循环#

fn main() {
for i in 1..10 {
if i == 4 {
break;
}
println!("i = {}", i);
}
}

输出:

i = 1
i = 2
i = 3

continue 跳过本次循环#

fn main() {
for i in 1..6 {
if i == 3 {
continue;
}
println!("i = {}", i);
}
}

输出:

i = 1
i = 2
i = 4
i = 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=1
i=1, j=2
i=1, j=3
i=2, j=1

🧠 四、控制流表达式总结#

关键字功能可返回值常见场景
if / else条件判断✅ 可返回值条件分支、三元替代
loop无限循环✅ 可返回值事件循环、等待条件
while条件循环❌ 不返回值普通条件控制
for迭代集合❌ 不返回值遍历数组、范围
break跳出循环✅ 可带值(仅 loop)提前结束
continue跳过当前循环跳过部分逻辑
'label命名循环嵌套跳出

💡 五、练习建议#

下面是几个非常好的练习:

  1. 🧮 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);
    }
    }
  2. 🎯 计算 1~100 的和

    let mut sum = 0;
    for i in 1..=100 {
    sum += i;
    }
    println!("sum = {}", sum);
  3. 🔁 使用 loop 实现 while

    let mut n = 5;
    loop {
    if n == 0 {
    break;
    }
    println!("n = {}", n);
    n -= 1;
    }

📚 六、总结口诀#

Rust 控制流:

  • 判断用 if,必须是布尔;
  • 循环有三:loop 无限、while 条件、for 迭代;
  • ifloop 都能返回值;
  • breakcontinue 控制循环流程;
  • 支持标签跳出多层循环。
study 2day
https://iqwq.com/posts/rust/study-2day/
作者
Xiaolin
发布于
2025-11-03
许可协议
CC BY-NC-SA 4.0