课程名称:领略Rust之美,挑战双高语言
课程章节: 第4章 Rust 流程控制
课程老师:叶枭
课程内容:
今天学习的内容是 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'
, []
这些被称为真值表达式,也就是说它们在需要的时候能转换为 true
,null
和 undefined
为假值表达式,可以转换为 false
:
// [] 转为 true,条件成立
if([]) {
console.log('[]')
}
// null 转为 false,条件不成立
if(null) {
console.log(null)
}
而Rust 是强类型语言,不存在隐式类型转换,所以条件表达式必须产生一个 bool
类型的值,要么是 true
,要么是 false
。不能是像 JS 中那样,写成真值或假值表达式,比如:
fn main() {
if 10 {
println!(10);
}
}
代码运行会报错,提示类型不匹配,需要 bool
类型,但是传递了整数型:
课程收获
这节课学习了 Rust 中的 if 表达式,它用于条件判断,执行不同的分支逻辑。和其他语言不同的是,它的条件表达式不使用圆括号包裹,条件分支可以有返回值,并且条件表达式必须返回一个 true
或者 false
,不能通过隐式类型抓换的方式去获得。