语句和表达式
语句和表达式是构成程序的基本单元。Rust 的语句和表达式比较特别,末尾是否添加 ; 决定了它们的性质。理解它们之间的区别对于编写有效的 Rust 代码至关重要。
语句 (Statements)
定义: 语句是执行某些操作但不返回值的指令,但 Rust 中语句的值是 () (单元类型)。
特点:
- 执行操作但不返回值
- 末尾通常以分号
;结束 - 语句的值为
()(单元类型)
语句类型:
- 变量声明:
let x = 5; - 函数定义:
fn foo() {} - 表达式加分号:
5 + 6;
示例:
rust
let a = 5; // 变量声明语句
let b = {5 + 6;}; // 有分号,是语句,返回值为 ()
let b = {5 + 6}; // 块表达式,等于 let b = 5 + 6; ✅ 正确: 表达式返回值赋给变量
let b = (5 + 6); // 括号表达式,等于 let b = 5 + 6; ✅ 正确: 表达式返回值赋给变量表达式 (Expressions)
定义: 表达式计算并产生一个值,可以赋值给变量或作为函数返回值。
特点:
- 计算并返回一个值
- 末尾不加分号
- 加分号就会变成语句,返回值变为
()
表达式类型:
- 数值计算:
5 + 6 - 函数调用:
add(1, 2) - 块表达式:
{ let x = 5; x + 1 } - 括号表达式:
(5 + 6) if条件表达式:if condition { 10 } else { 20 }match模式匹配loop循环表达式
示例:
rust
// 块表达式,返回 6
let y = {
let x = 5;
x + 1; // 有分号,是语句,返回值为 ()
x + 1 // 无分号,是表达式,返回值为 6
};
// if 作为表达式
let result = if condition { 10; } else { 20; }; // 有分号,是语句,返回值为 ()
let result = if condition { 10 } else { 20 }; // 无分号,是表达式,返回值为 10 或 20语句 vs 表达式
| 特性 | 语句 | 表达式 |
|---|---|---|
| 返回值 | 不返回值,返回() | 返回计算结果 |
| 末尾符号 | 以 ; 结束 | 无分号 |
| 赋值 | 不可赋值 | 可赋值给变量 |
重要
- Rust 中 几乎所有的语句都是表达式,但并非所有的表达式都是语句
- 末尾无分号 → 表达式 → 返回一个值(默认调用
return) - 末尾有分号 → 语句 → 返回值为
()
在 Rust 中,只有以下两种情况是真正的语句:
- 声明语句:例如
let x = 5;。你不能把它赋值给别人(如let y = (let x = 5);会报错)。 - 表达式语句:在表达式后面加上分号
;。分号会强行吞掉返回值,使其变成()(单元类型)。