5.1 条件判断(if 语句)
在编程中,条件判断是控制程序执行路径的重要工具。Rust 提供了功能强大的 if 语句,它不仅支持基本的条件判断,还具有表达式的特性,可以直接返回值。
5.1.1 基本 if 语句
if 语句的语法非常简单:条件必须是布尔类型,if 块中的代码仅在条件为 true 时执行。
基本语法
1
2
3
4
5
6
7
|
fn main() {
let number = 5;
if number > 0 {
println!("The number is positive.");
}
}
|
注意事项
- 条件表达式必须返回布尔值 (
bool)。
- Rust 不允许将非布尔值作为条件,例如
if number 会报错。
5.1.2 if-else 语句
当需要在条件不满足时执行另一段代码,可以使用 else 块。
示例
1
2
3
4
5
6
7
8
9
|
fn main() {
let number = -3;
if number > 0 {
println!("The number is positive.");
} else {
println!("The number is not positive.");
}
}
|
5.1.3 多条件分支
如果需要判断多个条件,可以使用 else if。
示例
1
2
3
4
5
6
7
8
9
10
11
|
fn main() {
let number = 0;
if number > 0 {
println!("The number is positive.");
} else if number < 0 {
println!("The number is negative.");
} else {
println!("The number is zero.");
}
}
|
执行顺序
- Rust 从上到下依次检查条件。
- 一旦某个条件为
true,后续条件将被忽略。
5.1.4 if 作为表达式
在 Rust 中,if 是一个表达式,这意味着它可以返回值。这使得代码更加简洁且灵活。
示例:根据条件赋值
1
2
3
4
5
6
7
8
9
|
fn main() {
let number = 10;
let result = if number % 2 == 0 {
"even"
} else {
"odd"
};
println!("The number is {}.", result);
}
|
注意事项
- 所有分支的返回值类型必须一致,否则会编译报错。
- 示例(错误代码):
1
2
3
4
5
|
let result = if true {
42
} else {
"not a number" // 编译错误:类型不一致
};
|
5.1.5 嵌套 if 语句
if 语句可以嵌套使用,但深度嵌套会降低代码的可读性。
示例
1
2
3
4
5
6
7
8
9
10
11
12
|
fn main() {
let x = 5;
let y = 10;
if x > 0 {
if y > 0 {
println!("Both x and y are positive.");
} else {
println!("x is positive, but y is not.");
}
}
}
|
5.1.6 使用逻辑运算符简化条件判断
Rust 提供了逻辑运算符 &&(与)、||(或)和 !(非),可以用来简化多条件判断。
示例
1
2
3
4
5
6
7
8
9
10
|
fn main() {
let x = 5;
let y = 10;
if x > 0 && y > 0 {
println!("Both x and y are positive.");
} else {
println!("At least one of x or y is not positive.");
}
}
|
逻辑运算符优先级
!(非)优先级最高。
&&(与)优先于 ||(或)。
5.1.7 if 与常见错误
1. 条件表达式非布尔值
1
2
3
4
5
6
7
8
|
fn main() {
let number = 1;
// 错误示例:条件表达式不是布尔值
if number { // 编译错误
println!("This will not compile.");
}
}
|
2. 返回值类型不一致
1
2
3
4
5
6
7
|
fn main() {
let result = if true {
42
} else {
"error" // 编译错误:类型不一致
};
}
|
5.1.8 总结
Rust 的 if 语句功能强大,支持基本条件判断、多条件分支、嵌套和表达式用法。通过合理使用 if,可以编写清晰、高效的逻辑控制代码。以下是使用 if 语句的最佳实践:
- 避免深度嵌套,尽量使用逻辑运算符简化条件。
- 利用
if 作为表达式,减少重复代码。
- 确保所有分支的返回值类型一致。
在下一节中,我们将介绍 Rust 的循环结构,包括 loop、while 和 for,学习如何实现高效的流程控制。