条件语句 #
一、if 表达式 #
1.1 基本 if #
rust
fn main() {
let number = 5;
if number > 0 {
println!("正数");
}
}
1.2 if-else #
rust
fn main() {
let number = -5;
if number >= 0 {
println!("非负数");
} else {
println!("负数");
}
}
1.3 if-else if-else #
rust
fn main() {
let score = 85;
if score >= 90 {
println!("优秀");
} else if score >= 80 {
println!("良好");
} else if score >= 60 {
println!("及格");
} else {
println!("不及格");
}
}
二、条件表达式 #
2.1 if 是表达式 #
Rust中 if 是表达式,可以返回值:
rust
fn main() {
let number = 5;
let result = if number > 0 { "正数" } else { "非正数" };
println!("结果: {}", result);
}
2.2 类型必须一致 #
所有分支必须返回相同类型:
rust
fn main() {
let number = 5;
// 错误:类型不一致
// let result = if number > 0 { 1 } else { "zero" };
// 正确
let result = if number > 0 { 1 } else { 0 };
println!("结果: {}", result);
}
2.3 用于变量赋值 #
rust
fn main() {
let condition = true;
let number = if condition { 5 } else { 10 };
println!("number = {}", number);
}
三、条件判断 #
3.1 必须是布尔值 #
条件必须是布尔类型:
rust
fn main() {
let number = 3;
// 错误:条件必须是布尔值
// if number { ... }
// 正确
if number != 0 {
println!("非零");
}
}
3.2 复杂条件 #
rust
fn main() {
let age = 25;
let has_id = true;
let is_member = false;
// 组合条件
if age >= 18 && has_id {
println!("可以进入");
}
// 复杂条件
if (age >= 18 && has_id) || is_member {
println!("可以进入(会员或成年人)");
}
}
四、嵌套 if #
4.1 基本嵌套 #
rust
fn main() {
let age = 25;
let has_id = true;
if age >= 18 {
if has_id {
println!("成年人,有证件");
} else {
println!("成年人,无证件");
}
} else {
println!("未成年");
}
}
4.2 扁平化 #
建议使用逻辑运算符扁平化:
rust
fn main() {
let age = 25;
let has_id = true;
// 更清晰
if age >= 18 && has_id {
println!("成年人,有证件");
} else if age >= 18 {
println!("成年人,无证件");
} else {
println!("未成年");
}
}
五、let-if 模式 #
5.1 基本用法 #
rust
fn main() {
let some_value = Some(5);
if let Some(x) = some_value {
println!("值: {}", x);
}
}
5.2 与 else 配合 #
rust
fn main() {
let some_value: Option<i32> = None;
if let Some(x) = some_value {
println!("值: {}", x);
} else {
println!("无值");
}
}
六、实践示例 #
6.1 成绩等级 #
rust
fn get_grade(score: u32) -> char {
if score >= 90 {
'A'
} else if score >= 80 {
'B'
} else if score >= 70 {
'C'
} else if score >= 60 {
'D'
} else {
'F'
}
}
fn main() {
let scores = vec![95, 85, 75, 65, 55];
for score in scores {
println!("分数 {} -> 等级 {}", score, get_grade(score));
}
}
6.2 闰年判断 #
rust
fn is_leap_year(year: u32) -> bool {
if year % 400 == 0 {
true
} else if year % 100 == 0 {
false
} else if year % 4 == 0 {
true
} else {
false
}
}
fn main() {
let years = vec![2000, 1900, 2020, 2023];
for year in years {
if is_leap_year(year) {
println!("{} 是闰年", year);
} else {
println!("{} 不是闰年", year);
}
}
}
6.3 计算器 #
rust
fn calculate(a: f64, b: f64, op: char) -> Option<f64> {
if op == '+' {
Some(a + b)
} else if op == '-' {
Some(a - b)
} else if op == '*' {
Some(a * b)
} else if op == '/' {
if b != 0.0 {
Some(a / b)
} else {
None
}
} else {
None
}
}
fn main() {
let operations = vec![('+', 10.0, 5.0), ('-', 10.0, 5.0), ('*', 10.0, 5.0), ('/', 10.0, 0.0)];
for (op, a, b) in operations {
match calculate(a, b, op) {
Some(result) => println!("{} {} {} = {}", a, op, b, result),
None => println!("{} {} {} = 错误", a, op, b),
}
}
}
七、总结 #
本章学习了:
- if 表达式的基本用法
- if-else 和 if-else if 结构
- if 作为表达式返回值
- 条件必须是布尔类型
- 嵌套 if 和扁平化
- let-if 模式
下一章,我们将学习循环语句。
最后更新:2026-03-27