Rust 基礎(chǔ)系列 #6: 條件語(yǔ)句
什么是條件語(yǔ)句?
在編寫代碼的時(shí)候,最常見的任務(wù)之一就是檢查某些條件是否為 true
或 false
。“如果溫度高于 35°C,打開空調(diào)?!?/p>
通過(guò)使用 if
和 else
這樣的關(guān)鍵字(有時(shí)候結(jié)合使用),程序員可以根據(jù)條件(例如提供的參數(shù)數(shù)量、從命令行傳遞的選項(xiàng)、文件名、錯(cuò)誤發(fā)生等)改變程序的行為。
所以,對(duì)一個(gè)程序員來(lái)說(shuō),了解任何語(yǔ)言的控制流都是至關(guān)重要的,更不用說(shuō) Rust 了。
條件運(yùn)算符
下表列出了所有常用的單個(gè)條件運(yùn)算符:
運(yùn)算符 | 示例 | 解釋 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以及下表是邏輯運(yùn)算符,它們用于一個(gè)或多個(gè)條件之間:
運(yùn)算符 | 示例 | 解釋 |
|
|
|
|
| 所有 條件都為 |
|
|
|
?? 與數(shù)學(xué)相似,你可以使用圓括號(hào)來(lái)指定操作的優(yōu)先級(jí)。
使用 if else
要控制 Rust 代碼的基本流程,使用兩個(gè)關(guān)鍵字:if
和 else
。這可以根據(jù)提供的條件的狀態(tài)創(chuàng)建兩個(gè)“執(zhí)行路徑”。
一個(gè)簡(jiǎn)單的帶有替代執(zhí)行路徑的 if 塊的語(yǔ)法如下:
if 條件 {
<語(yǔ)句>;
} else {
<語(yǔ)句>;
}
?? 當(dāng)只有一個(gè)條件時(shí),將其括在圓括號(hào)中并不是強(qiáng)制性的。根據(jù)語(yǔ)法,使用圓括號(hào)是可選的。你仍然應(yīng)該使用它們來(lái)指定優(yōu)先級(jí)并優(yōu)化可讀性。
來(lái)看看一個(gè)例子。
fn main() {
let a = 36;
let b = 25;
if a > b {
println!("a 大于 b");
} else {
println!("b 大于 a");
}
}
這里,我聲明了兩個(gè)整數(shù)變量 a
和 b
,它們的值分別為 '36' 和 '25'。在第 5 行,我檢查變量 a
中存儲(chǔ)的值是否大于變量 b
中存儲(chǔ)的值。如果條件計(jì)算結(jié)果為 true
,則會(huì)執(zhí)行第 6 行的代碼。如果條件計(jì)算結(jié)果為 false
,由于我們有一個(gè) else
塊(可選),第 8 行的代碼將被執(zhí)行。
來(lái)看看程序的輸出。
a 大于 b
完美!
來(lái)修改一下變量 a
的值,使其小于變量 b
的值,看看會(huì)發(fā)生什么。我將把 a
的值改為 '10'。修改后的輸出如下:
b 大于 a
但是,如果我將相同的值存儲(chǔ)在變量 a
和 b
中呢?為了看到這一點(diǎn),我將兩個(gè)變量的值都設(shè)置為 '40'。修改后的輸出如下:
b 大于 a
嗯?從邏輯上講,這沒(méi)有任何意義... :frowning:
但是這可以改進(jìn)!我們繼續(xù)。
使用 else if 條件
與其他任何編程語(yǔ)言一樣,你可以使用 else if
塊來(lái)提供多于兩個(gè)的執(zhí)行路徑。語(yǔ)法如下:
if 條件 {
<語(yǔ)句>;
} else if 條件 {
<語(yǔ)句>;
} else {
<語(yǔ)句>;
}
現(xiàn)在,通過(guò)使用 else if
塊,我可以改進(jìn)程序的邏輯。下面是修改后的程序。
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");
}
}
現(xiàn)在,我的程序的邏輯是正確的。它已經(jīng)處理了所有的邊緣情況(我能想到的)。第 5 行處理了 a
等于 b
的情況。第 7 行處理了 a
可能大于 b
的情況。而 a
小于 b
的情況則由第 9 行的 else
塊隱式處理。
現(xiàn)在,當(dāng)我運(yùn)行這段代碼時(shí),我得到了以下輸出:
a 與 b 是相等的
現(xiàn)在這就完美了!
示例:找到最大值
我知道使用 if
和 else
很容易,但是讓我們?cè)倏匆粋€(gè)程序。這次,我們來(lái)比較三個(gè)數(shù)字。我還將在這個(gè)實(shí)例中使用邏輯運(yùn)算符!
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 是最大的");
}
}
}
這個(gè)程序第一眼看上去可能很復(fù)雜,但是不要害怕,我會(huì)解釋的!
最開始,我聲明了三個(gè)變量 a
、b
和 c
,并賦予了我能想到的隨機(jī)值。然后,在第 6 行,我檢查了沒(méi)有變量的值與其他變量相同的條件。首先,我檢查 a
和 b
的值,然后是 a
和 c
,最后是 b
和 c
。這樣我就可以確定沒(méi)有變量中存儲(chǔ)了重復(fù)的值。
然后,在第 7 行,我檢查了變量 a
中存儲(chǔ)的值是否是最大的。如果這個(gè)條件計(jì)算結(jié)果為 true
,則會(huì)執(zhí)行第 8 行的代碼。否則,將檢查第 9 行的執(zhí)行路徑。
在第 9 行,我檢查了變量 b
中存儲(chǔ)的值是否是最大的。如果這個(gè)條件計(jì)算結(jié)果為 true
,則會(huì)執(zhí)行第 10 行的代碼。如果這個(gè)條件也是 false
,那么只有一種可能。3 個(gè)變量中的最大值既不是 a
也不是 b
。
所以,自然地,在 else
塊中,我打印出變量 c
擁有最大值。
來(lái)看看程序的輸出:
a 是最大的
這是預(yù)期的結(jié)果。嘗試修改分配給每個(gè)變量的值,并自己測(cè)試一下! :smiley:
總結(jié)
你學(xué)習(xí)到了如何使用 if
和 else
語(yǔ)句。在你繼續(xù)使用大量 if
else if
語(yǔ)句制作自己的 AI 之前(哈哈),讓我們?cè)诒鞠盗械南乱黄恼轮袑W(xué)習(xí) Rust 中的循環(huán)。
持續(xù)關(guān)注。