控制流 (Control flow)(第一部分)
我们到目前为止编写的程序都非常简单。
指令序列从上到下执行,仅此而已。
是时候引入一些分支 (branching) 了。
if 语句
if 关键字用于仅在条件为真时执行代码块。
下面是一个简单的例子:
let number = 3;
if number < 5 {
println!("`number` 小于 5");
}
这个程序会打印 number is smaller than 5,因为条件 number < 5 为真。
else 语句
与大多数编程语言一样,Rust 支持可选的 else 分支,当 if 表达式中的条件为假时执行代码块。
例如:
let number = 3;
if number < 5 {
println!("`number` 小于 5");
} else {
println!("`number` 大于或等于 5");
}
else if 语句
当你有多个 if 表达式,一个嵌套在另一个里面时,你的代码会越来越向右偏移。
let number = 3;
if number < 5 {
println!("`number` 小于 5");
} else {
if number >= 3 {
println!("`number` 大于或等于 3,但小于 5");
} else {
println!("`number` 小于 3");
}
}
你可以使用 else if 关键字将多个 if 表达式组合成一个:
let number = 3;
if number < 5 {
println!("`number` 小于 5");
} else if number >= 3 {
println!("`number` 大于或等于 3,但小于 5");
} else {
println!("`number` 小于 3");
}
布尔值 (Booleans)
if 表达式中的条件必须是 bool 类型,即布尔值 (boolean)。
布尔值与整数一样,是 Rust 中的基本类型。
布尔值可以有两个值之一:true 或 false。
没有真值或假值 (No truthy or falsy values)
如果 if 表达式中的条件不是布尔值,你会得到一个编译错误 (compilation error)。
例如,下面的代码将无法编译:
let number = 3;
if number {
println!("`number` 不为零");
}
你会得到以下编译错误:
error[E0308]: 类型不匹配
--> src/main.rs:3:8
|
3 | if number {
| ^^^^^^ 期望 `bool`,找到整数
这遵循了 Rust 关于类型强制的理念:没有从非布尔类型到布尔类型的自动转换。
Rust 没有像 JavaScript 或 Python 那样的真值 (truthy) 或假值 (falsy) 概念。
你必须明确指定要检查的条件。
比较运算符 (Comparison operators)
使用比较运算符为 if 表达式构建条件是很常见的。
以下是 Rust 中处理整数时可用的比较运算符:
==:等于!=:不等于<:小于>:大于<=:小于或等于>=:大于或等于
if/else 是表达式 (expressions)
在 Rust 中,if 表达式是表达式 (expression),而不是语句:它们返回一个值。
这个值可以赋给变量或在其他表达式中使用。例如:
let number = 3;
let message = if number < 5 {
"小于 5"
} else {
"大于或等于 5"
};
在上面的例子中,if 的每个分支都评估为一个字符串字面量 (string literal),
然后将其赋值给 message 变量。
唯一的要求是两个 if 分支必须返回相同的类型。
原文链接:英文原文