当前位置: 首页 > news >正文

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

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

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

想象一下,你的 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/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“把每个都过一遍”遍历数组、列表(首选!
  1. if 条件必须是 bool,不能是数字或字符串。
  2. if 是表达式,可以赋值给变量,但所有分支返回类型必须一致。
  3. 遍历集合,优先用 for,安全又省心!
http://www.dtcms.com/a/356794.html

相关文章:

  • 关于Libvio访问异常排查指南
  • 2025互联网大厂Java面试1000道题目及参考答案
  • openEuler系统实现MySQL数据库主从复制
  • Java 流(Stream)、文件(File)和IO
  • NSSCTF-[NISACTF 2022]string_WP
  • 第6.4节:awk语言 for 语句
  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • (二)Python语法基础(下)
  • web端播放flv视频流demo(flv.js的使用)
  • 【C语言16天强化训练】从基础入门到进阶:Day 15
  • 量化研究--开放ptrade西蒙斯全天候ETF策略动量策略
  • 一文说清楚ABAP中的‘显示提交(Explicit Commit)’和‘隐式提交(Implicit Commit)’
  • CesiumJS 封装 - 初始化与配置
  • Ubuntu 搭建 Solana 区块链开发环境 + Anchor 智能合约完整教程
  • 2025年防窜货系统行业深度分析报告
  • 将数据赋值到Word并下载
  • Cesium 入门教程(十三):粒子系统实例
  • 无人机中的坐标系理解:机体坐标系,东北天(NED)坐标系,世界大地(WGS84)坐标系
  • Python的一次实际应用:利用Python操作Word文档的页码
  • AI 与脑机接口的交叉融合:当机器 “读懂” 大脑信号,医疗将迎来哪些变革?
  • CPP学习之map和set
  • 渗透测试学习笔记
  • 【论文阅读】SegCLIP:用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习
  • Minio临时地址访问资源提示SignatureDoesNotMatch问题记录
  • gdb打印长字符产变量信息
  • TypeScript的Type
  • Linux(0)|梦开始的地方:xshell下载
  • MAC spotlight 搜不到应用程序和 tags 生效
  • 五、Callable 接口
  • Spring为什么需要三级缓存