我的七大 Rust 關(guān)鍵字
從 Rust 標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)一些有用的關(guān)鍵字。
我使用 Rust 已經(jīng)有幾個(gè)月了,寫(xiě)的東西比我預(yù)期的要多——盡管隨著我的學(xué)習(xí),我改進(jìn)了所寫(xiě)的代碼,并完成了一些超出我最初意圖的更復(fù)雜的任務(wù),相當(dāng)多的東西已經(jīng)被扔掉了。
我仍然喜歡它,并認(rèn)為談?wù)撘恍┰?Rust 中反復(fù)出現(xiàn)的重要關(guān)鍵字可能會(huì)有好處。我會(huì)提供我個(gè)人對(duì)它們的作用的總結(jié):為什么你需要考慮如何使用它們,以及任何其他有用的東西,特別是對(duì)于剛接觸 Rust 的新手或來(lái)自另一種語(yǔ)言的人(如 Java;請(qǐng)閱讀我的文章 為什么作為一個(gè) Java 程序員的我喜歡學(xué)習(xí) Rust)。
事不宜遲,讓我們開(kāi)始吧。獲取更多信息的好地方總是 Rust 官方文檔 —— 你可能想從 std 標(biāo)準(zhǔn)庫(kù)開(kāi)始。
const – 你可以用 const 來(lái)聲明常量,而且你應(yīng)該這樣做。雖然這不是造火箭,但請(qǐng)一定要用 const ,如果你要在不同的模塊中使用常量,那請(qǐng)創(chuàng)建一個(gè) lib.rs 文件(Rust 默認(rèn)的),你可以把所有的常量放在一個(gè)命名良好的模塊中。我曾經(jīng)在不同模塊的不同文件中發(fā)生過(guò) const 變量名(和值)的沖突,僅僅是因?yàn)槲姨珣辛?,除了在不同文件中剪切和粘貼之外,我本可以通過(guò)創(chuàng)建一個(gè)共享模塊來(lái)節(jié)省大量的工作。
let – 你并不 總是 需要用 let 語(yǔ)句聲明一個(gè)變量,但當(dāng)你這樣做時(shí)你的代碼會(huì)更加清晰。此外,如果可以,請(qǐng)一定要添加變量類(lèi)型。Rust 會(huì)盡最大努力猜測(cè)它應(yīng)該是什么類(lèi)型的變量,但它不一定總能在運(yùn)行時(shí)做到這一點(diǎn)(在這種情況下,編譯器 Cargo 會(huì)提示你),它甚至可能做不到你期望的那樣。在后一種情況下,對(duì)于 Cargo 來(lái)說(shuō),抱怨你所賦值的函數(shù)(例如)與聲明不一致,總比 Rust 試圖幫助你做錯(cuò)事,而你卻不得不在其他地方花費(fèi)大量時(shí)間來(lái)進(jìn)行調(diào)試要簡(jiǎn)單。
match – match 對(duì)我來(lái)說(shuō)是新鮮事物,我喜歡使用它。它與其他編程語(yǔ)言中的 switch 沒(méi)有什么不同,但在 Rust 中被廣泛使用。它使代碼更清晰易讀,如果你做了一些愚蠢的事情(例如錯(cuò)過(guò)一些可能的情況),Cargo 會(huì)很好地提示你。我一般的經(jīng)驗(yàn)法則是,在管理不同的選項(xiàng)或進(jìn)行分支時(shí),如果可以使用 match,那就請(qǐng)一定要使用它。
mut – 在聲明一個(gè)變量時(shí),如果它的值在聲明后會(huì)發(fā)生變化,那么你需要聲明它是可變的(LCTT 譯注:Rust 中變量默認(rèn)是不可變的)。常見(jiàn)的錯(cuò)誤是在某個(gè)變量 沒(méi)有 變化的情況下聲明它是可變的,這時(shí)編譯器會(huì)警告你。如果你收到了 Cargo 的警告,說(shuō)一個(gè)可變的變量沒(méi)有被改變,而你認(rèn)為它被 改變 了,那么你可能要檢查該變量的范圍,并確保你使用的是正確的那個(gè)。
return – 實(shí)際上我很少使用 return,它用于從函數(shù)中返回一個(gè)值,但是如果你只是在函數(shù)的最后一行提供值(或提供返回值的函數(shù)),通常會(huì)變得更簡(jiǎn)單,能更清晰地閱讀。警告:在很多情況下,你 會(huì) 忘記省略這一行末尾的分號(hào)(;),如果你這樣做,編譯器會(huì)不高興的。
unsafe – 如其意:如果你想做一些不能保證 Rust 內(nèi)存安全的事情,那么你就需要使用這個(gè)關(guān)鍵字。我絕對(duì)無(wú)意在現(xiàn)在或?qū)?lái)的任何時(shí)候宣布我的任何 Rust 代碼不安全;Rust 如此友好的原因之一是它阻止了這種黑客行為。如果你真的需要這樣做,再想想,再想想,然后重新設(shè)計(jì)代碼。除非你是一個(gè)非常低級(jí)的系統(tǒng)程序員,否則要 避免 使用 unsafe。
use – 當(dāng)你想使用另一個(gè) crate 中的東西時(shí),例如結(jié)構(gòu)體、變量、函數(shù)等,那么你需要在你要使用它的代碼的代碼塊的開(kāi)頭聲明它。另一個(gè)常見(jiàn)的錯(cuò)誤是,你這樣做了,但沒(méi)有在 Cargo.toml 文件中添加該 crate (最好有一個(gè)最小版本號(hào))。
我知道,這不是我寫(xiě)過(guò)的最復(fù)雜的文章,但這是我在開(kāi)始學(xué)習(xí) Rust 時(shí)會(huì)欣賞的那種文章。我計(jì)劃在關(guān)鍵函數(shù)和其他 Rust 必知知識(shí)方面編寫(xiě)類(lèi)似的文章:如果你有任何要求,請(qǐng)告訴我!