控制制流,第一部分

迄今为止,我们的所有程序都相当直接。

一系列指令自上而下执行,仅此而已。

现在是引入分支的时候了。

if 表达式

if 关键字用于仅在条件为真时执行一段代码。

这里有个简单示例:

#![allow(unused)]
fn main() {
let number = 3;
if number < 5 {
    println!("`number` 小于5");
}
}

此程序会打印 number 小于5,因为条件 number < 5 为真。

与多数编程语言一样,Rust 支持可选的 else 分支,在 if 表达式中的条件为假时执行代码块。

例如:

#![allow(unused)]
fn main() {
let number = 3;

if number < 5 {
    println!("`number` 小于5");
} else {
    println!("`number` 大于或等于5");
}
}

布尔值

if 表达式中的条件必须为类型 bool,即布尔值。

布尔值,与整数一样,在 Rust 中是原始类型。

布尔值有两个可能:truefalse

真值与非真值

如果 if 表达式中的条件不是布尔值,你会遇到编译错误。

例如,以下代码无法编译:

#![allow(unused)]
fn main() {
let number = 3;
if number {
    println!("`number` 不为零");
}
}

你会得到以下编译错误:

error[E0308]: mismatched types
 --> src/main.rs:3:8
  |
3 |     if number {
  |        ^^^^^^ expected `bool`, found integer

这源自 Rust 的类型强制哲学:不存在从非布尔类型到布尔类型的自动转换。 不像JavaScript 或 Python, Rust 不具备 真值假值 的概念。 你需要明确你想检查的条件。

比较运算符

使用比较运算符构建if 表达式的条件非常常见。 在处理整数时,Rust 提供以下比较运算符:

  • ==:等于
  • !=:不等于
  • <:小于
  • >:大于
  • <=:小于或等于
  • >=:大于或等于

参考

本节练习位于 exercises/02_basic_calculator/03_if_else