Linux中國

Rust 基礎系列 #6: 條件語句

上一篇文章 中,你學習了函數。在這篇文章中,我們將學習使用條件語句來管理 Rust 程序的控制流。

什麼是條件語句?

在編寫代碼的時候,最常見的任務之一就是檢查某些條件是否為 truefalse。「如果溫度高於 35°C,打開空調。」

通過使用 ifelse 這樣的關鍵字(有時候結合使用),程序員可以根據條件(例如提供的參數數量、從命令行傳遞的選項、文件名、錯誤發生等)改變程序的行為。

所以,對一個程序員來說,了解任何語言的控制流都是至關重要的,更不用說 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 代碼的基本流程,使用兩個關鍵字:ifelse。這可以根據提供的條件的狀態創建兩個「執行路徑」。

一個簡單的帶有替代執行路徑的 if 塊的語法如下:

if 條件 {
    <語句>;
} else {
    <語句>;
}

? 當只有一個條件時,將其括在圓括弧中並不是強制性的。根據語法,使用圓括弧是可選的。你仍然應該使用它們來指定優先順序並優化可讀性。

來看看一個例子。

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

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

這裡,我聲明了兩個整數變數 ab,它們的值分別為 '36' 和 '25'。在第 5 行,我檢查變數 a 中存儲的值是否大於變數 b 中存儲的值。如果條件計算結果為 true,則會執行第 6 行的代碼。如果條件計算結果為 false,由於我們有一個 else 塊(可選),第 8 行的代碼將被執行。

來看看程序的輸出。

a 大於 b

完美!

來修改一下變數 a 的值,使其小於變數 b 的值,看看會發生什麼。我將把 a 的值改為 '10'。修改後的輸出如下:

b 大於 a

但是,如果我將相同的值存儲在變數 ab 中呢?為了看到這一點,我將兩個變數的值都設置為 '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 是相等的

現在這就完美了!

示例:找到最大值

我知道使用 ifelse 很容易,但是讓我們再看一個程序。這次,我們來比較三個數字。我還將在這個實例中使用邏輯運算符!

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 是最大的");
        }
    }
}

這個程序第一眼看上去可能很複雜,但是不要害怕,我會解釋的!

最開始,我聲明了三個變數 abc,並賦予了我能想到的隨機值。然後,在第 6 行,我檢查了沒有變數的值與其他變數相同的條件。首先,我檢查 ab 的值,然後是 ac,最後是 bc。這樣我就可以確定沒有變數中存儲了重複的值。

然後,在第 7 行,我檢查了變數 a 中存儲的值是否是最大的。如果這個條件計算結果為 true,則會執行第 8 行的代碼。否則,將檢查第 9 行的執行路徑。

在第 9 行,我檢查了變數 b 中存儲的值是否是最大的。如果這個條件計算結果為 true,則會執行第 10 行的代碼。如果這個條件也是 false,那麼只有一種可能。3 個變數中的最大值既不是 a 也不是 b

所以,自然地,在 else 塊中,我列印出變數 c 擁有最大值。

來看看程序的輸出:

a 是最大的

這是預期的結果。嘗試修改分配給每個變數的值,並自己測試一下! :smiley:

總結

你學習到了如何使用 ifelse 語句。在你繼續使用大量 if else if 語句製作自己的 AI 之前(哈哈),讓我們在本系列的下一篇文章中學習 Rust 中的循環。

持續關注。

(題圖:MJ/3eea3bbb-b630-4470-ae21-391ab86cd5bf)

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

作者:Pratham Patel 選題:lkxed 譯者:Cubik65536 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國