趣味学Rust基础篇(控制流程)

发布于:2025-09-01 ⋅ 阅读:(19) ⋅ 点赞:(0)

这一节,我将使用生活中的举例,帮你轻松掌握这些核心概念,就像在听一个程序员讲段子。

控制流:你的代码会“思考”和“重复劳动”了!

想象一下,你的 Rust 程序是个聪明的家庭机器人。它不仅能听指令做事,还能判断情况(比如“如果脏了就打扫”),还能重复干活(比如“扫地10遍”)。这种“判断”和“重复”的能力,就叫控制流

今天我们就来教你的机器人学会两种超能力:条件判断(if)循环干活(loop/while/for)


一、if 表达式:机器人会“看情况办事”

if 就像你对机器人说:“如果……就……否则……”。

1. 基本用法:简单判断

fn main() {
    let mood = 3; // 机器人的心情值

    if mood < 5 {
        println!("心情不好,需要安慰!");
    } else {
        println!("心情很好,继续工作!");
    }
}
  • if mood < 5:如果心情值小于 5
  • else:否则(心情 ≥ 5)

运行结果:心情不好,需要安慰!(因为 3 < 5)

重点1:条件必须是 bool!不能“模糊判断”

在 Rust 中,条件必须是 truefalse,不能是数字、字符串等。

错误示范(像 JavaScript 那样写):

if mood { // 错!mood 是 3,不是 true/false
    println!("有心情就工作");
}

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 是表达式,结果赋给 plan

    println!("今天计划:{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,1
    println!("{count}!");
}
println!("LIFTOFF!!!");

输出:

3!
2!
1!
LIFTOFF!!!

while 更简洁,更不易出错!


总结:控制流口诀

控制流 关键词 口诀 适用场景
条件判断 if / else if / else “如果……就……否则……” 做选择题
无限循环 loop + break/continue “一直干,直到喊停” 重试操作、等待信号
条件循环 while “当……时,一直干” 计数、状态检查
遍历集合 for “把每个都过一遍” 遍历数组、列表(首选!
  1. if 条件必须是 bool,不能是数字或字符串。
  2. if 是表达式,可以赋值给变量,但所有分支返回类型必须一致。
  3. 遍历集合,优先用 for,安全又省心!

网站公告

今日签到

点亮在社区的每一天
去签到