Rust if...else
if 让程序能够做决定:根据某个条件,执行这一段代码或者另一段代码。
基本的 if
Section titled “基本的 if”fn main() { let age = 20;
if age >= 18 { println!("你可以投票"); }}有两点要注意,从其他语言转过来的人经常在这里栽跟头:
- 条件两边不用加括号:写
if age >= 18,而不是if (age >= 18)。 - 条件必须是真正的
bool。if age(一个数字)无法编译,要写成if age != 0之类的形式。
if / else
Section titled “if / else”fn main() { let age = 15;
if age >= 18 { println!("你可以投票"); } else { println!("年龄还不够"); }}用 else if 处理更多分支
Section titled “用 else if 处理更多分支”fn main() { let score = 72;
if score >= 90 { println!("等级:A"); } else if score >= 75 { println!("等级:B"); } else if score >= 60 { println!("等级:C"); } else { println!("等级:F"); }}和你预想的一样,Rust 会从上到下依次检查每个条件,执行第一个满足条件的分支。
把 if 当作表达式
Section titled “把 if 当作表达式”这是 Rust 能做、而很多语言做不到的事:if 可以产生一个值。也就是说,可以把它写在 let 的右边:
fn main() { let age = 20; let status = if age >= 18 { "成年人" } else { "未成年人" };
println!("{status}");}这和函数返回值的方式一样:每个分支里的值后面都不加分号。唯一的要求是,两个分支必须产生相同的类型(这里都是 &str)。
组合条件,而不是层层嵌套
Section titled “组合条件,而不是层层嵌套”可以把一个 if 放进另一个 if 里。这样能用,但嵌套到两三层就很难读了。很多时候,可以改用逻辑运算符 &&(与)和 ||(或)把条件连起来:
fn main() { let temperature = 22; let is_raining = false;
// 嵌套:能用,但代码越来越往右缩进 if temperature > 15 { if !is_raining { println!("嵌套写法:出去散散步吧"); } }
// 同样的检查,合成一个条件 if temperature > 15 && !is_raining { println!("组合写法:出去散散步吧"); }
// 只要有一边为 true,|| 就为 true if temperature < 0 || temperature > 35 { println!("待在屋里吧"); } else { println!("天气不错"); }}输出:
嵌套写法:出去散散步吧组合写法:出去散散步吧天气不错如果内层代码块还要额外做点别的事,或者它有自己的 else,嵌套依然合理。但如果外层 if 唯一的作用就是“守住”内层,用 && 能更简洁地表达同样的意思。要检查一个数是否在某个范围内,写成 temperature >= 15 && temperature <= 25。Rust 不允许写 15 <= temperature <= 25。
1. 奇数还是偶数
Section titled “1. 奇数还是偶数”设一个数 n = 7。把 if 当作表达式,让变量 kind 等于 "偶数" 或 "奇数",然后打印 7 是奇数。提示:当 n % 2 == 0 时,这个数是偶数。
查看答案
fn main() { let n = 7; let kind = if n % 2 == 0 { "偶数" } else { "奇数" }; println!("{n} 是{kind}");}输出:
7 是奇数2. 电影票价
Section titled “2. 电影票价”一家电影院的票价是:12 岁以下儿童 5 元,65 岁及以上 7 元,其他人 12 元。设 age 为 70,用一个 if / else if / else 表达式算出 price,然后打印 票价:7 元。提示:每个分支都必须返回一个数字,而且整个 if 的最后一个 } 后面要加分号。
查看答案
fn main() { let age = 70;
let price = if age < 12 { 5 } else if age >= 65 { 7 } else { 12 };
println!("票价:{price} 元");}输出:
票价:7 元if 条件 { ... }:不需要括号,条件必须是bool。- 用
else if串起更多检查,用else兜底。 - 用
&&和||组合条件,而不是把if套在if里。 if可以当作表达式来产生值:两个分支的类型必须一致,而且必须有else。
小测验
1. Rust 的 if 条件有什么硬性要求?
2. 把 if 当作表达式和 let 一起用时,两个分支必须满足什么条件?
得分: 0 / 2
- 控制流 —《Rust 程序设计语言》:官方教程讲解
if、else if,以及在let中使用if。 - if/else — 通过例子学 Rust:一个可运行的示例,展示分支如何产生值。
- If expressions — The Rust Reference(英文):想了解精确细节时,这里有确切的规则。
- Exercism 上的 Rust 练习(英文):免费的练习题,还有导师点评;前面几道题大量用到
if和else。