作者 | Ukeje
譯者 | 布加迪
審校 | 重樓
Rust是一種強大的語言,但從哪里開始入手呢?如果您習慣使用另一種語言,就應該知道Rust如何處理這些熟悉的概念。
1、梳理Rust
自2015年發布以來,Rust已成為開發人員最喜歡的編程語言之一。Rust提供了出色的性能和安全特性,具有直觀簡潔的語法,因而成為理想的編程語言。
Rust適合構建各種程序,包括Web應用程序、命令行工具和網絡服務。Rust包含您期望從現代編程語言獲得的許多特性,比如并發性和類型推斷等。
Rust是一種跨平臺編程語言,可以在大多數操作系統上運行。若要開始使用Rust,請訪問官方Rust網站(https://www.rust-lang.org/tools/install),并為你的操作系統安裝首選版本。
一旦安裝了Rust,你就可以開始在擴展名為.rs的Rust文件中編寫程序。Rust用途廣泛,易于上手。如果您之前有過編程經驗,會發現它很簡單。
2、Rust中的變量和常量
Rust有很強的表達力,并且有多種聲明變量的方法。您可以使用let關鍵字來聲明變量。
下面是在Rust中聲明變量的方法:
let a: String;
let b: i32;
let c: () = ();
變量a和b分別是字符串和整數。變量c是一個Rust單元類型,充當函數和表達式的占位符。
在可選的數據類型聲明之后,您可以使用等號符號聲明和初始化變量。
fn mAIn(){
let age: String = String::from("five years old");
let age = 5; // equivalent to let age: i32 = 5;
println!("{}", age);
}
程序在使用println!宏打印輸出之前聲明兩個age變量。第一個age變量指定數據類型,第二個變量不指定。
在聲明變量時不必指定其數據類型。Rust編譯器在編譯時根據值的數據類型推斷類型。
在Rust中,您還可以用const關鍵字聲明常量,就像聲明變量一樣:
const age: &str = "five years old";
您無法修改聲明為常量的變量的值。
3、注釋Rust程序
Rust提供了單行和塊注釋的功能。針對單行注釋,您可以使用雙正斜杠(//):
fn main() {
// This is a line comment
let x = 5; // This comment explains the purpose of the `x` variable
}
針對多行注釋(塊注釋),使用正斜杠后跟星號(/*),并用星號后跟正斜杠(*/)結束塊:
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;
}
這樣,注釋就可以簡潔明了。
4、Rust中的數組
數組是數據類型相同的元素的固定大小的集合。默認情況下,Rust在堆棧上分配數組。
下面是在Rust中聲明數組的方法:
fn main() {
let numbers = [1, 2, 3, 4, 5];
}
numbers數組含有5個項。您可以使用索引訪問數組中某個位置的值:
fn main() {
let numbers = [1, 2, 3, 4, 5];
let x = numbers[3];
println!("{}", x)
}
main函數輸出訪問數組第四個元素的變量x。
5、Rust中的向量
Rust提供向量來掩蓋數組的限制。向量是動態大小的,它們可以根據需要來擴大和縮小。
下面是在Rust中聲明向量的方法:
fn main() {
let my_vec: Vec<i32> = vec![1, 2, 3, 4, 5];
let x = my_vec[3];
println!("{}", x)
}
my_vec向量是一個32位整數向量。變量x訪問向量的第四個元素,main函數將值輸出到控制臺。
6、Rust的條件語句
條件語句是Rust用于程序決策的控制結構之一。您可以使用if和else關鍵字來處理程序中的決策。
下面這個if語句根據兩個整數的相等性向控制臺輸出一個字符串。
fn main() {
let a: i32 = 12;
if a == 12 {
println!("a equals twelve");
}
}
由于變量等于12,main函數使用println!宏打印輸出字符串。可以使用else關鍵字來處理if語言評估為false的情況:
fn main() {
let a: i32 = 12;
if a == 123 {
println!("a equals twelve");
} else {
println!("a does not equal twelve");
}
}
在這個例子中,else語句之所以運行,是由于a的值不等于123。
針對復雜的情形,您可以使用match關鍵字來聲明匹配語句:
fn main() {
let age: i32 = 7;
match age {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
_ => println!("zero"),
}
}
main函數將age變量與match語句中的case進行匹配,并執行與該值匹配的表達式。下劃線(_)是在值匹配時運行的默認語句。
7、Rust中的循環
Rust為重復的任務提供循環。Rust有三種主要類型的循環:loop循環、while循環和for循環。
loop關鍵字創建一個無限循環,該循環一直運行,直至遇到break關鍵字:
fn main() {
loop {
println!("printed repeatedly until break statement is encountered.");
break;
}
}
當您想要重復一段代碼時,只要條件的評估結果為true,while循環就很方便:
fn main() {
let mut count = 0;
while count < 5 {
println!("The count is {}", count);
count += 1;
}
}
for循環適用于迭代一組項,比如數組:
fn main() {
let numbers = [1, 2, 3, 4, 5];
for item in numbers.iter() {
println!("The current item is {}", item);
}
}
for循環遍歷number數組,并將每一項打印輸出到控制臺。
8、聲明和調用Rust函數
使用fn關鍵字聲明一個Rust函數,后跟函數名、參數列表和返回類型(如果有的話)。
下面是如何聲明一個帶參數和返回類型的函數:
fn add(a: i32, b: i32) -> i32 {
return a + b;
}
add函數接受兩個32位整數,并返回一個32位整數,即兩個參數的和。要從您代碼的其他地方調用函數,只需指定名稱和參數(如果有的話):
fn main() {
let result = add(2, 3);
println!("2 + 3 = {}", result);
}
result變量保存調用add函數的結果。main函數使用println!宏將結果打印輸出到控制臺。
9、Rust中的結構體
Rust提供了用于定義將相關值分組的自定義數據類型的結構體。結構體是創建具有特定屬性的對象的藍圖。
下面顯示了如何聲明一個結構體:
struct Person {
name: String,
age: u32,
is_male: bool,
}
Person結構體有三個字段:字符串、無符號32位整數和布爾值。在定義了一個結構體之后,您可以在程序的其他部分創建其實例:
fn main() {
let person1 = Person {
name: String::from("Candace Flynn"),
age: 16,
is_male: false,
};
}
person1變量是Person結構體的一個實例。在實例化時,您可以為結構體字段賦值。您可以隨心所欲地創建一個結構體的多個實例。
10、如何在Rust中實現OOP?
Rust很靈活,您可以在Rust中使用結構體等內置數據結構來實現OOP概念。
可以使用結構體來替代類。借助Rust的結構體,可以為類型定義藍圖,并使用Rust在結構體方面提供的功能實現不同的OOP概念。
原文鏈接:https://www.makeuseof.com/rust-everything-know-start/