---
author: Pratham Patel
category: 软件开发
comments_data: []
count:
  commentnum: 0
  favtimes: 0
  likes: 0
  sharetimes: 0
  viewnum: 1477
date: '2023-06-11 09:49:25'
editorchoice: false
excerpt: 在这篇文章中，我们将学习使用条件语句来管理 Rust 程序的控制流。
fromurl: https://itsfoss.com/rust-if-else/
id: 15896
islctt: true
largepic: /images/p/202306/11/094832bkkbs7oxntx7zxas.jpg
permalink: /article-15896-1.html
pic: /images/p/202306/11/094832bkkbs7oxntx7zxas.jpg.thumb.jpg
related:
- displayorder: 0
  raid: 15908
reviewer: wxy
selector: lkxed
summary: 在这篇文章中，我们将学习使用条件语句来管理 Rust 程序的控制流。
tags:
- Rust
thumb: false
title: 'Rust 基础系列 #6: 条件语句'
titlepic: true
translator: Cubik65536
updated: '2023-06-11 09:49:25'
---

![](/images/p/202306/11/094832bkkbs7oxntx7zxas.jpg)


在 [上一篇文章](/article-15855-1.html) 中，你学习了函数。在这篇文章中，我们将学习使用条件语句来管理 Rust 程序的控制流。


### 什么是条件语句？


在编写代码的时候，最常见的任务之一就是检查某些条件是否为 `true` 或 `false`。“如果温度高于 35°C，打开空调。”


通过使用 `if` 和 `else` 这样的关键字（有时候结合使用），程序员可以根据条件（例如提供的参数数量、从命令行传递的选项、文件名、错误发生等）改变程序的行为。


所以，对一个程序员来说，了解任何语言的控制流都是至关重要的，更不用说 Rust 了。


#### 条件运算符


下表列出了所有常用的单个条件运算符：




| 运算符 | 示例 | 解释 |
| --- | --- | --- |
| `>` | `a > b` | `a` **大于** `b` |
| `<` | `a < b` | `a` **小于** `b` |
| `==` | `a == b` | `a` **等于** `b` |
| `!=` | `a != b` | `a` **不等于** `b` |
| `>=` | `a >= b` | `a` **大于** 或 **等于** `b` |
| `<=` | `a <= b` | `a` **小于** 或 **等于** `b` |


以及下表是逻辑运算符，它们用于一个或多个条件之间：




| 运算符 | 示例 | 解释 |
| --- | --- | --- |
| `||` （逻辑或） | `条件1 || 条件2` | `条件1` 或 `条件2` 中至少有一个为 `true` |
| `&&` （逻辑与） | `条件1 && 条件2` | **所有** 条件都为 `true` |
| `!` （逻辑非） | `!条件` | `条件` 的布尔值的相反值 |



> 
> ? 与数学相似，你可以使用圆括号来指定操作的优先级。
> 
> 
> 


### 使用 if else


要控制 Rust 代码的基本流程，使用两个关键字：`if` 和 `else`。这可以根据提供的条件的状态创建两个“执行路径”。


一个简单的带有替代执行路径的 if 块的语法如下：



```
if 条件 {
    <语句>;
} else {
    <语句>;
}

```


> 
> ? 当只有一个条件时，将其括在圆括号中并不是强制性的。根据语法，使用圆括号是可选的。你仍然应该使用它们来指定优先级并优化可读性。
> 
> 
> 


来看看一个例子。



```
fn main() {
    let a = 36;
    let b = 25;

    if a > b {
        println!("a 大于 b");
    } else {
        println!("b 大于 a");
    }
}

```

这里，我声明了两个整数变量 `a` 和 `b`，它们的值分别为 '36' 和 '25'。在第 5 行，我检查变量 `a` 中存储的值是否大于变量 `b` 中存储的值。如果条件计算结果为 `true`，则会执行第 6 行的代码。如果条件计算结果为 `false`，由于我们有一个 `else` 块（可选），第 8 行的代码将被执行。


来看看程序的输出。



```
a 大于 b

```

完美！


来修改一下变量 `a` 的值，使其小于变量 `b` 的值，看看会发生什么。我将把 `a` 的值改为 '10'。修改后的输出如下：



```
b 大于 a

```

但是，如果我将相同的值存储在变量 `a` 和 `b` 中呢？为了看到这一点，我将两个变量的值都设置为 '40'。修改后的输出如下：



```
b 大于 a

```

嗯？从逻辑上讲，这没有任何意义... :frowning:


但是这可以改进！我们继续。


### 使用 else if 条件


与其他任何编程语言一样，你可以使用 `else if` 块来提供多于两个的执行路径。语法如下：



```
if 条件 {
    <语句>;
} else if 条件 {
    <语句>;
} else {
    <语句>;
}

```

现在，通过使用 `else if` 块，我可以改进程序的逻辑。下面是修改后的程序。



```
fn main() {
    let a = 40;
    let b = 40;

    if a == b {
        println!("a 与 b 是相等的");
    } else if a > b {
        println!("a 大于 b");
    } else {
        println!("b 大于 a");
    }
}

```

现在，我的程序的逻辑是正确的。它已经处理了所有的边缘情况（我能想到的）。第 5 行处理了 `a` 等于 `b` 的情况。第 7 行处理了 `a` 可能大于 `b` 的情况。而 `a` 小于 `b` 的情况则由第 9 行的 `else` 块隐式处理。


现在，当我运行这段代码时，我得到了以下输出：



```
a 与 b 是相等的

```

现在这就完美了！


### 示例：找到最大值


我知道使用 `if` 和 `else` 很容易，但是让我们再看一个程序。这次，我们来比较三个数字。我还将在这个实例中使用逻辑运算符！



```
fn main() {
    let a = 73;
    let b = 56;
    let c = 15;

    if (a != b) && (a != c) && (b != c) {
        if (a > b) && (a > c) {
            println!("a 是最大的");
        } else if (b > a) && (b > c) {
            println!("b 是最大的");
        } else {
            println!("c 是最大的");
        }
    }
}

```

这个程序第一眼看上去可能很复杂，但是不要害怕，我会解释的！


最开始，我声明了三个变量 `a`、`b` 和 `c`，并赋予了我能想到的随机值。然后，在第 6 行，我检查了没有变量的值与其他变量相同的条件。首先，我检查 `a` 和 `b` 的值，然后是 `a` 和 `c`，最后是 `b` 和 `c`。这样我就可以确定没有变量中存储了重复的值。


然后，在第 7 行，我检查了变量 `a` 中存储的值是否是最大的。如果这个条件计算结果为 `true`，则会执行第 8 行的代码。否则，将检查第 9 行的执行路径。


在第 9 行，我检查了变量 `b` 中存储的值是否是最大的。如果这个条件计算结果为 `true`，则会执行第 10 行的代码。如果这个条件也是 `false`，那么只有一种可能。3 个变量中的最大值既不是 `a` 也不是 `b`。


所以，自然地，在 `else` 块中，我打印出变量 `c` 拥有最大值。


来看看程序的输出：



```
a 是最大的

```

这是预期的结果。尝试修改分配给每个变量的值，并自己测试一下！ :smiley:


### 总结


你学习到了如何使用 `if` 和 `else` 语句。在你继续使用大量 `if` `else if` 语句制作自己的 AI 之前（哈哈），让我们在本系列的下一篇文章中学习 Rust 中的循环。


持续关注。


*（题图：MJ/3eea3bbb-b630-4470-ae21-391ab86cd5bf）*




---


via: <https://itsfoss.com/rust-if-else/>


作者：[Pratham Patel](https://itsfoss.com/author/pratham/) 选题：[lkxed](https://github.com/lkxed/) 译者：[Cubik65536](https://github.com/Cubik65536) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出