征服 Rust 編程世界的終極指南
自 2015 年發(fā)布以來,Rust 已經(jīng)成為開發(fā)者中最受喜愛的編程語言之一。Rust 具有出色的性能和安全特性,以直觀簡(jiǎn)潔的語法著稱。
Rust 適用于構(gòu)建各種程序,包括 Web 應(yīng)用、命令行工具和網(wǎng)絡(luò)服務(wù)。Rust 擁有許多現(xiàn)代編程語言應(yīng)具備的特性,如并發(fā)性、類型推斷等。
開始使用 Rust
Rust 是一個(gè)跨平臺(tái)的編程語言,可在大多數(shù)操作系統(tǒng)上運(yùn)行。要開始使用Rust,請(qǐng)前往官方Rust網(wǎng)站,并安裝適合您操作系統(tǒng)的首選版本。
安裝完Rust后,您可以開始在具有.rs擴(kuò)展名的Rust文件中編寫程序。Rust非常靈活且易于學(xué)習(xí)。如果您具有先前的編程經(jīng)驗(yàn),您會(huì)發(fā)現(xiàn)它很簡(jiǎn)單。
Rust 中的變量和常量
Rust具有高度表達(dá)性,有多種聲明變量的方法。您可以使用let關(guān)鍵字來聲明變量。
以下是在Rust中聲明變量的示例:
let a: String;
let b: i32;
let c: () = ();
a和b變量分別是一個(gè)字符串和一個(gè)整數(shù)。c變量是Rust的單位類型,用作函數(shù)和表達(dá)式的占位符。
在可選的數(shù)據(jù)類型聲明之后,您可以使用等號(hào)來聲明和初始化具有值的變量。
fn main(){
????let age: String = String::from("five years old");
????let age = 5; // equivalent to let age: i32 = 5;
????println!("{}", age);
}
該程序在打印之前聲明了兩個(gè)age變量,并使用println!宏進(jìn)行打印。第一個(gè)age變量指定了數(shù)據(jù)類型,而第二個(gè)沒有。
在聲明變量時(shí),您不必指定變量的數(shù)據(jù)類型。Rust編譯器會(huì)在編譯時(shí)根據(jù)值的數(shù)據(jù)類型推斷出類型。
您還可以使用const關(guān)鍵字類似于聲明變量來聲明常量:
const age: &str = "five years old";
您無法修改聲明為常量的變量的值。
為 Rust 程序添加注釋
Rust提供了單行注釋和塊注釋的功能。您可以使用雙斜杠(//)進(jìn)行單行注釋:
fn main() {
????// This is a line comment
????let x = 5; // This comment explains the purpose of the `x` variable
}
對(duì)于多行注釋(塊注釋),使用斜杠后跟星號(hào)(/)開始?jí)K注釋,并使用星號(hào)后跟斜杠(/)關(guān)閉塊注釋:
fn main() {
????/*
????This is a block comment that spans multiple lines.
????It is often used to describe a larger block of code.
????*/
????let x = 5;
}
您的注釋應(yīng)該簡(jiǎn)明扼要。
Rust 中的數(shù)組
數(shù)組是具有固定大小的、相同數(shù)據(jù)類型的元素集合。默認(rèn)情況下,Rust在堆棧上分配數(shù)組。
下面是如何在Rust中聲明數(shù)組的方法:
fn main() {
????let numbers = [1, 2, 3, 4, 5];
}
numbers數(shù)組包含五個(gè)元素。您可以使用索引訪問數(shù)組中的位置上的值:
fn main() {
????let numbers = [1, 2, 3, 4, 5];
????let x = numbers[3];
????println!("{}", x)
}
主函數(shù)打印訪問數(shù)組的第四個(gè)元素的變量x的值。
Rust 中的向量
Rust提供了向量來彌補(bǔ)數(shù)組的局限性。向量具有動(dòng)態(tài)大小,可以根據(jù)需要增長(zhǎng)和縮小。
下面是在Rust中聲明向量的方法:
fn main() {
????let my_vec: Vec<i32> = vec![1, 2, 3, 4, 5];
????let x = my_vec[3];
????println!("{}", x)
}
my_vec向量是一個(gè)包含32位整數(shù)的向量。變量x訪問向量的第四個(gè)元素,主函數(shù)將其值打印到控制臺(tái)上。
Rust 的條件語句
條件語句是Rust程序中用于做決策的控制結(jié)構(gòu)之一。你可以使用if和else關(guān)鍵字來處理程序中的決策。
下面是一個(gè)if語句的例子,根據(jù)兩個(gè)整數(shù)是否相等將一個(gè)字符串打印到控制臺(tái)上。
fn main() {
????let a: i32 = 12;
????if a == 12 {
????????println!("a equals twelve");
???}
}
主函數(shù)使用println!宏打印字符串,因?yàn)樽兞康扔?2。
你可以使用else關(guān)鍵字來處理if語句為false的情況:
fn main() {
????let a: i32 = 12;
????if a == 123 {
????????println!("a equals twelve");
????} else {
????????println!("a does not equal twelve");
????}
}
在這個(gè)例子中,else語句會(huì)執(zhí)行,因?yàn)閍的值不等于123。
你可以使用match關(guān)鍵字來處理復(fù)雜的條件語句:
fn main() {
????let age: i32 = 7;
????match age {
????????1 => println!("one"),
????????2 => println!("two"),
????????3 => println!("three"),
????????_ => println!("zero"),
????}
}
主函數(shù)使用match語句將age變量與匹配的case進(jìn)行匹配,并執(zhí)行與值匹配的表達(dá)式。下劃線(_)是默認(rèn)語句,在值有匹配時(shí)執(zhí)行。
Rust 中的循環(huán)
Rust提供了用于重復(fù)任務(wù)的循環(huán)。Rust有三種主要類型的循環(huán):loop、while和for循環(huán)。
loop關(guān)鍵字創(chuàng)建一個(gè)無限循環(huán),直到遇到break關(guān)鍵字才會(huì)停止:
fn main() {
????loop {
????????println!("重復(fù)打印,直到遇到break語句。");
????????break;
????}
}
while循環(huán)在條件為true時(shí)重復(fù)執(zhí)行代碼塊:
fn main() {
????let mut count = 0;
????while count < 5 {
????????println!("The count is {}", count);
????????count += 1;
????}
}
for循環(huán)適用于迭代集合中的項(xiàng),比如數(shù)組:
fn main() {
????let numbers = [1, 2, 3, 4, 5];
????for item in numbers.iter() {
????????println!("The current item is {}", item);
????}
}
這個(gè)for循環(huán)遍歷numbers數(shù)組,并將每個(gè)項(xiàng)打印到控制臺(tái)上。
聲明和調(diào)用 Rust 函數(shù)
使用fn關(guān)鍵字聲明Rust函數(shù),然后是函數(shù)名、參數(shù)列表和返回類型(如果有)。
下面是一個(gè)帶有參數(shù)和返回類型的函數(shù)聲明示例:
fn add(a: i32, b: i32) -> i32 {
????return a + b;
}
add函數(shù)接受兩個(gè)32位整數(shù)參數(shù),并返回一個(gè)32位整數(shù),即兩個(gè)參數(shù)的和。
要從代碼的其他位置調(diào)用函數(shù),只需指定函數(shù)名和參數(shù)(如果有):
fn main() {
????let result = add(2, 3);
????println!("2 + 3 = {}", result);
}
result變量保存調(diào)用add函數(shù)的結(jié)果。main函數(shù)使用println!宏將結(jié)果打印到控制臺(tái)上。
Rust 中的結(jié)構(gòu)體
Rust 提供了結(jié)構(gòu)體(struct)來定義自定義數(shù)據(jù)類型,用于將相關(guān)的值進(jìn)行分組。結(jié)構(gòu)體是創(chuàng)建具有特定屬性的對(duì)象的藍(lán)圖。
下面是如何聲明一個(gè)結(jié)構(gòu)體:
struct Person {
????name: String,
????age: u32,
????is_male: bool,
}
Person結(jié)構(gòu)體有三個(gè)字段:一個(gè)String類型、一個(gè)無符號(hào)32位整數(shù)和一個(gè)布爾值。
在定義結(jié)構(gòu)體之后,你可以在程序的其他部分創(chuàng)建它的實(shí)例:
fn main() {
????let person1 = Person {
????????name: String::from("Candace Flynn"),
????????age: 16,
????????is_male: false,
????};
}
person1變量是Person結(jié)構(gòu)體的一個(gè)實(shí)例。在實(shí)例化時(shí),你可以為結(jié)構(gòu)體的字段賦值。你可以創(chuàng)建任意多個(gè)結(jié)構(gòu)體的實(shí)例。
你可以在 Rust 中實(shí)現(xiàn)面向?qū)ο缶幊蹋∣OP)的概念
Rust非常靈活,你可以使用內(nèi)置的數(shù)據(jù)結(jié)構(gòu)(如結(jié)構(gòu)體)在Rust中實(shí)現(xiàn)面向?qū)ο缶幊痰母拍睢?/p>
你可以使用結(jié)構(gòu)體作為類的替代品。通過Rust的結(jié)構(gòu)體,你可以定義類型的藍(lán)圖,并使用Rust提供的結(jié)構(gòu)體功能實(shí)現(xiàn)不同的面向?qū)ο缶幊谈拍睢?/p>