日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Rust編程基礎(chǔ)之條件表達(dá)式和循環(huán)

來(lái)源: 責(zé)編: 時(shí)間:2024-01-08 09:16:49 209觀看
導(dǎo)讀1.if表達(dá)式if 表達(dá)式允許根據(jù)條件執(zhí)行不同的代碼分支, 以下代碼是一個(gè)典型的使用if表達(dá)式的例子:fn main() { let number = 3; if number < 5 { println!("condition was true"); } else { pr

1.if表達(dá)式

if 表達(dá)式允許根據(jù)條件執(zhí)行不同的代碼分支, 以下代碼是一個(gè)典型的使用if表達(dá)式的例子:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let number = 3;    if number < 5 {        println!("condition was true");    } else {        println!("condition was false");    }}

所有的 if 表達(dá)式都以 if 關(guān)鍵字開(kāi)頭,其后跟一個(gè)條件。在這個(gè)例子中,條件檢查變量 number 的值是否小于 5。在條件為 true 時(shí)希望執(zhí)行的代碼塊位于緊跟條件之后的大括號(hào)中。2SV28資訊網(wǎng)——每日最新資訊28at.com

也可以包含一個(gè)可選的 else 表達(dá)式來(lái)提供一個(gè)在條件為 false 時(shí)應(yīng)當(dāng)執(zhí)行的代碼塊,如果不提供 else 表達(dá)式并且條件為 false 時(shí),程序會(huì)直接忽略 if 代碼塊并繼續(xù)執(zhí)行下面的代碼。2SV28資訊網(wǎng)——每日最新資訊28at.com

嘗試運(yùn)行該代碼, 會(huì)得到以下結(jié)果:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

嘗試改變 number 的值使條件為 false 時(shí)看看會(huì)發(fā)生什么:2SV28資訊網(wǎng)——每日最新資訊28at.com

let number = 7;

再次運(yùn)行程序并查看輸出:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

另外值得注意的是代碼中的條件 必須 是 bool 值。如果條件不是 bool 值,我們將得到一個(gè)錯(cuò)誤。2SV28資訊網(wǎng)——每日最新資訊28at.com

嘗試修改代碼:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let number = 3;    if number {        println!("number was three");    }}

這里 if 條件的值是 3,Rust 拋出了一個(gè)錯(cuò)誤:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)錯(cuò)誤表明 Rust 期望一個(gè) bool 卻得到了一個(gè)整數(shù)。不像 Ruby 或 JavaScript 這樣的語(yǔ)言,Rust 并不會(huì)嘗試自動(dòng)地將非布爾值轉(zhuǎn)換為布爾值。必須總是顯式地使用布爾值作為 if 的條件。例如,如果想要 if 代碼塊只在一個(gè)數(shù)字不等于 0 時(shí)執(zhí)行,可以把 if 表達(dá)式修改成下面這樣:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let number = 3;    if number != 0 {        println!("number was something other than zero");    }}

運(yùn)行代碼會(huì)打印出 number was something other than zero。2SV28資訊網(wǎng)——每日最新資訊28at.com

2.使用else if處理多重條件

可以將 else if 表達(dá)式與 if 和 else 組合來(lái)實(shí)現(xiàn)多重條件??匆韵麓a:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let number = 6;    if number % 4 == 0 {        println!("number is divisible by 4");    } else if number % 3 == 0 {        println!("number is divisible by 3");    } else if number % 2 == 0 {        println!("number is divisible by 2");    } else {        println!("number is not divisible by 4, 3, or 2");    }}

這個(gè)程序有四個(gè)可能的執(zhí)行路徑。運(yùn)行后應(yīng)該能看到如下輸出:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)執(zhí)行這個(gè)程序時(shí),它按順序檢查每個(gè) if 表達(dá)式并執(zhí)行第一個(gè)條件為 true 的代碼塊。注意即使 6 可以被 2 整除,也不會(huì)輸出 number is divisible by 2,更不會(huì)輸出 else 塊中的 number is not divisible by 4, 3, or 2。原因是 Rust 只會(huì)執(zhí)行第一個(gè)條件為 true 的代碼塊,并且一旦它找到一個(gè)以后,甚至都不會(huì)檢查剩下的條件了。2SV28資訊網(wǎng)——每日最新資訊28at.com

使用過(guò)多的 else if 表達(dá)式會(huì)使代碼顯得雜亂無(wú)章,所以如果有多于一個(gè) else if 表達(dá)式,最好重構(gòu)代碼。2SV28資訊網(wǎng)——每日最新資訊28at.com

3.在let語(yǔ)句中使用if

因?yàn)?nbsp;if 是一個(gè)表達(dá)式,我們可以在 let 語(yǔ)句的右側(cè)使用它, 例如:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let condition = true;    let number = if condition { 5 } else { 6 };    println!("The value of number is: {number}");}

number 變量將會(huì)綁定到表示 if 表達(dá)式結(jié)果的值上, 運(yùn)行一下查看結(jié)果:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

記住,代碼塊的值是其最后一個(gè)表達(dá)式的值,而數(shù)字本身就是一個(gè)表達(dá)式。在這個(gè)例子中,整個(gè) if 表達(dá)式的值取決于哪個(gè)代碼塊被執(zhí)行。這意味著 if 的每個(gè)分支的可能的返回值都必須是相同類型;2SV28資訊網(wǎng)——每日最新資訊28at.com

if 分支和 else 分支的結(jié)果都是 i32 整型。如果它們的類型不匹配會(huì)發(fā)生什么?,嘗試修改代碼:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let condition = true;    let number = if condition { 5 } else { "six" };    println!("The value of number is: {number}");}

當(dāng)編譯這段代碼時(shí),會(huì)得到一個(gè)錯(cuò)誤。if 和 else 分支的值類型是不相容的,同時(shí) Rust 也準(zhǔn)確地指出在程序中的何處發(fā)現(xiàn)的這個(gè)問(wèn)題,如圖:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

if 代碼塊中的表達(dá)式返回一個(gè)整數(shù),而 else 代碼塊中的表達(dá)式返回一個(gè)字符串。這不可行,因?yàn)樽兞勘仨氈挥幸粋€(gè)類型。Rust 需要在編譯時(shí)就確切的知道 number 變量的類型,這樣它就可以在編譯時(shí)驗(yàn)證在每處使用的 number 變量的類型是有效的。如果number的類型僅在運(yùn)行時(shí)確定,則 Rust 無(wú)法做到這一點(diǎn);且編譯器必須跟蹤每一個(gè)變量的多種假設(shè)類型,那么它就會(huì)變得更加復(fù)雜,對(duì)代碼的保證也會(huì)減少。2SV28資訊網(wǎng)——每日最新資訊28at.com

4.使用循環(huán)重復(fù)執(zhí)行

多次執(zhí)行同一段代碼是很常用的,Rust 為此提供了多種 循環(huán)(loops)。一個(gè)循環(huán)執(zhí)行循環(huán)體中的代碼直到結(jié)尾并緊接著回到開(kāi)頭繼續(xù)執(zhí)行。2SV28資訊網(wǎng)——每日最新資訊28at.com

Rust 有三種循環(huán):loop、while 和 for。2SV28資訊網(wǎng)——每日最新資訊28at.com

loop 關(guān)鍵字告訴 Rust 一遍又一遍地執(zhí)行一段代碼直到你明確要求停止。2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    loop {        println!("again!");    }}

當(dāng)運(yùn)行這個(gè)程序時(shí),我們會(huì)看到連續(xù)的反復(fù)打印 again!,直到我們手動(dòng)停止程序。大部分終端都支持一個(gè)快捷鍵,ctrl-c,來(lái)終止一個(gè)陷入無(wú)限循環(huán)的程序。Rust跟其它高級(jí)語(yǔ)言一樣,葉提供了break關(guān)鍵字停止循環(huán),使用continue關(guān)鍵字告訴程序跳過(guò)這個(gè)循環(huán)迭代中的任何剩余代碼,并轉(zhuǎn)到下一個(gè)迭代。2SV28資訊網(wǎng)——每日最新資訊28at.com

loop 的一個(gè)用例是重試可能會(huì)失敗的操作,比如檢查線程是否完成了任務(wù)。然而你可能會(huì)需要將操作的結(jié)果傳遞給其它的代碼。如果將返回值加入你用來(lái)停止循環(huán)的 break 表達(dá)式,它會(huì)被停止的循環(huán)返回, 看看下面的代碼:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let mut counter = 0;    let result = loop {        counter += 1;        if counter == 10 {            break counter * 2;        }    };    println!("The result is {result}");}

在循環(huán)之前,我們聲明了一個(gè)名為 counter 的變量并初始化為 0。接著聲明了一個(gè)名為 result 來(lái)存放循環(huán)的返回值。在循環(huán)的每一次迭代中,我們將 counter 變量加 1,接著檢查計(jì)數(shù)是否等于 10。當(dāng)相等時(shí),使用 break 關(guān)鍵字返回值 counter * 2。循環(huán)之后,我們通過(guò)分號(hào)結(jié)束賦值給 result 的語(yǔ)句。最后打印出 result 的值,也就是 20。2SV28資訊網(wǎng)——每日最新資訊28at.com

如果存在嵌套循環(huán),break 和 continue 應(yīng)用于此時(shí)最內(nèi)層的循環(huán)。你可以選擇在一個(gè)循環(huán)上指定一個(gè) 循環(huán)標(biāo)簽(loop label),然后將標(biāo)簽與 break 或 continue 一起使用,使這些關(guān)鍵字應(yīng)用于已標(biāo)記的循環(huán)而不是最內(nèi)層的循環(huán)??匆韵麓a:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let mut count = 0;    'counting_up: loop {        println!("count = {count}");        let mut remaining = 10;        loop {            println!("remaining = {remaining}");            if remaining == 9 {                break;            }            if count == 2 {                break 'counting_up;            }            remaining -= 1;        }        count += 1;    }    println!("End count = {count}");}

外層循環(huán)有一個(gè)標(biāo)簽 counting_up,它將從 0 數(shù)到 2。沒(méi)有標(biāo)簽的內(nèi)部循環(huán)從 10 向下數(shù)到 9。第一個(gè)沒(méi)有指定標(biāo)簽的 break 將只退出內(nèi)層循環(huán)。break 'counting_up; 語(yǔ)句將退出外層循環(huán)。運(yùn)行結(jié)果如下:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

5.while循環(huán)

在程序中計(jì)算循環(huán)的條件也很常見(jiàn)。當(dāng)條件為 true,執(zhí)行循環(huán)。當(dāng)條件不再為 true,調(diào)用 break 停止循環(huán)。這個(gè)循環(huán)類型可以通過(guò)組合 loop、if、else 和 break 來(lái)實(shí)現(xiàn)。然而,這個(gè)模式太常用了,Rust 為此內(nèi)置了一個(gè)語(yǔ)言結(jié)構(gòu),它被稱為 while 循環(huán)??匆韵麓a:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let a = [10, 20, 30, 40, 50];    let mut index = 0;    while index < 5 {        println!("the value is: {}", a[index]);        index += 1;    }}

這里,代碼對(duì)數(shù)組中的元素進(jìn)行計(jì)數(shù)。它從索引 0 開(kāi)始,并接著循環(huán)直到遇到數(shù)組的最后一個(gè)索引(這時(shí),index < 5 不再為真)。運(yùn)行這段代碼會(huì)打印出數(shù)組中的每一個(gè)元素,如圖:2SV28資訊網(wǎng)——每日最新資訊28at.com

圖片2SV28資訊網(wǎng)——每日最新資訊28at.com

數(shù)組中的所有五個(gè)元素都如期被打印出來(lái)。盡管 index 在某一時(shí)刻會(huì)到達(dá)值 5,不過(guò)循環(huán)在其嘗試從數(shù)組獲取第六個(gè)值(會(huì)越界)之前就停止了。2SV28資訊網(wǎng)——每日最新資訊28at.com

但這個(gè)過(guò)程很容易出錯(cuò);如果索引長(zhǎng)度或測(cè)試條件不正確會(huì)導(dǎo)致程序 panic。例如,如果將 a 數(shù)組的定義改為包含 4 個(gè)元素而忘記了更新條件 while index < 4,則代碼會(huì) panic。這也使程序更慢,因?yàn)榫幾g器增加了運(yùn)行時(shí)代碼來(lái)對(duì)每次循環(huán)進(jìn)行條件檢查,以確定在循環(huán)的每次迭代中索引是否在數(shù)組的邊界內(nèi)。2SV28資訊網(wǎng)——每日最新資訊28at.com

作為更簡(jiǎn)潔的替代方案,可以使用 for 循環(huán)來(lái)對(duì)一個(gè)集合的每個(gè)元素執(zhí)行一些代碼。改造后的代碼如下:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    let a = [10, 20, 30, 40, 50];    for element in a {        println!("the value is: {element}");    }}

當(dāng)運(yùn)行這段代碼時(shí),將看到與while循環(huán)中一樣的輸出。更為重要的是,我們?cè)鰪?qiáng)了代碼安全性,并消除了可能由于超出數(shù)組的結(jié)尾或遍歷長(zhǎng)度不夠而缺少一些元素而導(dǎo)致的 bug。2SV28資訊網(wǎng)——每日最新資訊28at.com

for 循環(huán)的安全性和簡(jiǎn)潔性使得它成為 Rust 中使用最多的循環(huán)結(jié)構(gòu)。下面是一個(gè)使用 for 循環(huán)來(lái)倒計(jì)時(shí)的例子,它還使用了一個(gè)方法,rev,用來(lái)反轉(zhuǎn) range:2SV28資訊網(wǎng)——每日最新資訊28at.com

fn main() {    for number in (1..4).rev() {        println!("{number}!");    }    println!("LIFTOFF!!!");}

執(zhí)行結(jié)果如圖:2SV28資訊網(wǎng)——每日最新資訊28at.com

2SV28資訊網(wǎng)——每日最新資訊28at.com

是不是感覺(jué)有點(diǎn)點(diǎn)帥氣了?2SV28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-57897-0.htmlRust編程基礎(chǔ)之條件表達(dá)式和循環(huán)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 事半功倍,提高IntelliJ IDEA代碼質(zhì)量的神級(jí)插件

下一篇: ICASSP 2024|字節(jié)跳動(dòng)流媒體音頻團(tuán)隊(duì)創(chuàng)新方案解決丟包補(bǔ)償、通用音質(zhì)修復(fù)問(wèn)題

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro真機(jī)揭曉 鈦空灰配色質(zhì)感拉滿

    終于,在經(jīng)過(guò)了幾波預(yù)熱之后,一加Ace2 Pro的外觀真機(jī)圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設(shè)計(jì)還是延續(xù)了一加11的方案,只是細(xì)節(jié)上有了調(diào)整,例如新加入了鈦空灰
  • 6月安卓手機(jī)好評(píng)榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價(jià)比榜之后,我們來(lái)看最后的安卓手機(jī)好評(píng)榜,數(shù)據(jù)來(lái)源安兔兔評(píng)測(cè),收集時(shí)間2023年6月1日至6月30日,僅限國(guó)內(nèi)市場(chǎng)。第一名:魅族20 Pro好評(píng)率:95%5月份的時(shí)候魅族20 Pro就是
  • 摸魚心法第一章——和配置文件說(shuō)拜拜

    為了能摸魚我們團(tuán)隊(duì)做了容器化,但是帶來(lái)的問(wèn)題是服務(wù)配置文件很麻煩,然后大家在群里進(jìn)行了“親切友好”的溝通圖片圖片圖片圖片對(duì)比就對(duì)比,簡(jiǎn)單對(duì)比下獨(dú)立配置中心和k8s作為配
  • JavaScript學(xué)習(xí) -AES加密算法

    引言在當(dāng)今數(shù)字化時(shí)代,前端應(yīng)用程序扮演著重要角色,用戶的敏感數(shù)據(jù)經(jīng)常在前端進(jìn)行加密和解密操作。然而,這樣的操作在網(wǎng)絡(luò)傳輸和存儲(chǔ)中可能會(huì)受到惡意攻擊的威脅。為了確保數(shù)據(jù)
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開(kāi)https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項(xiàng)目,添加 Spring Web 依賴項(xiàng),并單擊“生成”按鈕下載 .zip 文件,為下一步做準(zhǔn)備。請(qǐng)?jiān)谶M(jìn)入步驟2之前進(jìn)行解壓。圖
  • 使用LLM插件從命令行訪問(wèn)Llama 2

    最近的一個(gè)大新聞是Meta AI推出了新的開(kāi)源授權(quán)的大型語(yǔ)言模型Llama 2。這是一項(xiàng)非常重要的進(jìn)展:Llama 2可免費(fèi)用于研究和商業(yè)用途。(幾小時(shí)前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為L(zhǎng)la
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過(guò)這樣的問(wèn)題:移動(dòng)設(shè)備上有一個(gè)固定元素,當(dāng)激活虛擬鍵盤時(shí),該元素被隱藏在了鍵盤下方?多年來(lái),這一直是 Web 上的默認(rèn)行為,在本文中,我們將探討這個(gè)問(wèn)題、為什么會(huì)發(fā)生
  • 阿里大調(diào)整

    來(lái)源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,涉及員工績(jī)效、層級(jí)體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的&ldquo;征求意見(jiàn)版&rdquo;:1、取消P序列
  • 7月4日見(jiàn)!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級(jí)旗艦都已悉數(shù)亮相,而下半年即將推出的頂級(jí)旗艦已經(jīng)成為了數(shù)碼圈爆料的主流,其中就包括全新的iQOO 11S系
Top 主站蜘蛛池模板: 南溪县| 沅陵县| 六安市| 涪陵区| 娱乐| 高碑店市| 常德市| 浏阳市| 扶沟县| 曲沃县| 保德县| 三亚市| 武安市| 成都市| 珲春市| 甘南县| 钟山县| 白山市| 泸州市| 岐山县| 铜鼓县| 涟源市| 渝北区| 常宁市| 桃江县| 濉溪县| 尼玛县| 甘南县| 喀喇沁旗| 芮城县| 中阳县| 华坪县| 昭苏县| 米脂县| 玛纳斯县| 淅川县| 东宁县| 瑞丽市| 郓城县| 三河市| 株洲县|