条件语句 #

一、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