Rust(17):if 条件表达式

226 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

今天学习的内容是 Rust 中的 if 条件表达式。

if 表达式

前文说过了,Rust 是基于表达式的语言。所以其他语言中的 if 条件语句,在 Rust 中叫作是 if 条件表达式。

条件表达式用于流程控制,如果满足条件,则执行一个分支逻辑,否则执行另一个分支逻辑。和其他语言不同的是,if 关键字后面不需要加圆括号 ()

fn main() {
    let num = 5;
    if num < 5 {
        println!("num 小于5");
    } else if num == 5 {
        println!("num 等于5");
    } else {
        println!("num 大于5");
    }
}

执行代码,打印 “num 等于5”。

既然是表达式,意味着它有返回值,如果 if 表达式有返回,则要求每个分支返回的值的类型都一致,比如下面的示例中每个条件分支返回的类型都是整数型:

fn main() {
  let n = 10;
  let m = if n > 10 {
     15;   
  } else {
     5;    
  }; // 注意这里的分号,它是 let 变量声明的分号
  
  println!("m = {}", m); 
}

代码执行,打印结果为 m = 5

在弱类型语言比如 JS 中,1'hello', [] 这些被称为真值表达式,也就是说它们在需要的时候能转换为 truenullundefined 为假值表达式,可以转换为 false

// [] 转为 true,条件成立
if([]) {   
    console.log('[]')
}
​
// null 转为 false,条件不成立
if(null) {
    console.log(null)
}

而Rust 是强类型语言,不存在隐式类型转换,所以条件表达式必须产生一个 bool 类型的值,要么是 true ,要么是 false。不能是像 JS 中那样,写成真值或假值表达式,比如:

fn main() {
    if 10 {
        println!(10); 
    }
}

代码运行会报错,提示类型不匹配,需要 bool 类型,但是传递了整数型:

image-20220912150438320

小结

本文介绍了 Rust 中的 if 表达式,它用于条件判断,执行不同的分支逻辑。和其他语言不同的是,它的条件表达式不使用圆括号包裹,条件分支可以有返回值,并且条件表达式必须返回一个 true 或者 false,不能通过隐式类型转换的方式去获得。