变量、类型、控制流与表达式
本章目标
这一章掌握 Rust 最基础的表达能力:如何声明变量,类型如何参与检查,if、loop、while、for 如何控制执行路径,以及为什么 Rust 喜欢把很多东西设计成表达式。
它是什么
变量是名字和值的绑定。类型是值的形状和能力。控制流决定程序执行哪条路径。
Rust 变量默认不可变:
let count = 3;
如果要修改,需要显式写 mut:
let mut count = 3;
count += 1;
这个默认值很重要:Rust 鼓励你先写不可变数据,只有确实需要变化时再打开修改权限。
为什么需要
工程代码最怕“谁都能改”。默认不可变可以减少心智负担:看到一个没有 mut 的变量,你就知道它绑定后不会被重新赋值。
类型则帮助你防止把不同概念混在一起。比如端口号、文章 id、HTTP 状态码都可以是数字,但它们含义不同。随着工程变大,你会用结构体和枚举进一步表达这些差异。
怎么使用
常见变量写法:
let name = "RinBlog";
let port: u16 = 7878;
let mut visits = 0;
visits += 1;
println!("{name} runs on {port}, visits = {visits}");
常见控制流:
let status = 200;
let message = if status == 200 {
"OK"
} else {
"Not OK"
};
for number in 1..=3 {
println!("{number}");
}
if 可以产生值,所以能赋给 message。这就是表达式思维。
逐行解释
let status = 200;
let message = if status == 200 {
"OK"
} else {
"Not OK"
};
let status = 200;创建一个整数变量,编译器会根据上下文推断类型。let message = ...;创建另一个变量。if status == 200判断条件。条件必须是bool,不能用0或1冒充。"OK"是if分支的结果。"Not OK"是else分支的结果。- 两个分支必须产生兼容类型。这里都是字符串字面量。
- 最后的分号结束
let语句。
常见坑
- Rust 没有隐式真假值。
if count不合法,必须写成if count > 0。 let x = if cond { 1 } else { "one" };不合法,因为两个分支类型不同。mut允许重新赋值,不代表值可以被任意共享修改。- 变量遮蔽是允许的:
let x = x + 1;会创建新绑定,不是修改旧绑定。
练习
- 写一个变量
score,根据分数输出“通过”或“继续练习”。 - 用
for打印 1 到 10。 - 用
loop写一个计数器,到 3 时break。 - 尝试让
if两个分支返回不同类型,阅读报错。
造轮子任务
写一个迷你状态码解释器:输入硬编码的 status: u16,用 if 或 match 输出 200 OK、404 Not Found、500 Internal Server Error 或 Unknown。这会在后面理解 HTTP 响应时用上。
小结
变量、类型和控制流是所有 Rust 程序的地基。Rust 的特别之处在于它把“能不能改”“类型是否一致”“条件是否真的是布尔值”都提前检查,让程序行为更明确。