章节目录

变量、类型、控制流与表达式

本章目标

这一章掌握 Rust 最基础的表达能力:如何声明变量,类型如何参与检查,ifloopwhilefor 如何控制执行路径,以及为什么 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,不能用 01 冒充。
  • "OK"if 分支的结果。
  • "Not OK"else 分支的结果。
  • 两个分支必须产生兼容类型。这里都是字符串字面量。
  • 最后的分号结束 let 语句。

常见坑

  • Rust 没有隐式真假值。if count 不合法,必须写成 if count > 0
  • let x = if cond { 1 } else { "one" }; 不合法,因为两个分支类型不同。
  • mut 允许重新赋值,不代表值可以被任意共享修改。
  • 变量遮蔽是允许的:let x = x + 1; 会创建新绑定,不是修改旧绑定。

练习

  1. 写一个变量 score,根据分数输出“通过”或“继续练习”。
  2. for 打印 1 到 10。
  3. loop 写一个计数器,到 3 时 break
  4. 尝试让 if 两个分支返回不同类型,阅读报错。

造轮子任务

写一个迷你状态码解释器:输入硬编码的 status: u16,用 ifmatch 输出 200 OK404 Not Found500 Internal Server ErrorUnknown。这会在后面理解 HTTP 响应时用上。

小结

变量、类型和控制流是所有 Rust 程序的地基。Rust 的特别之处在于它把“能不能改”“类型是否一致”“条件是否真的是布尔值”都提前检查,让程序行为更明确。