Rust是一個靜態型別語言,但同時支援型別推導。這代表在編譯時,所有變數的型別都是確定的,不能像Python那樣能隨意更改。
1. 整數型別 (Integer)
整數有分帶號 (signed) 與無號 (unsigned),常見的型別如下(如圖):
預設是i32。
範例實作:
fn main() {
let a: i32 = 100;
let b: u8 = 200;
println!("a = {}, b = {}", a, b);
}
2. 浮點數型別(Floating-point)
Rust 有兩種浮點數:
• f32:32 位元浮點數
• f64:64 位元浮點數(預設)
範例實作:
fn main() {
let x = 2.0; // 預設 f64
let y: f32 = 3.0; // 明確指定 f32
println!("x = {}, y = {}", x, y);
}
3. 布林(Boolean)
布林用bool,只有兩個值:true/false。
範例實作:
fn main() {
let t = true;
let f: bool = false;
println!("t = {}, f = {}", t, f);
}
4. 字元(char)
Rust的char是Unicode,佔4bytes,可以表示更多字元。
範例實作:
fn main() {
let c = 'z';
let heart = '❤';
println!("c = {}, heart = {}", c, heart);
}
5. 型別推導(Type inference)
Rust編譯器通常會自動判斷型別。
範例實作:
fn main() {
let x = 42; // 推導為 i32
let y = 3.14; // 推導為 f64
println!("x = {}, y = {}", x, y);
}
有歧義的時候必須標註:
fn main() {
let guess: u32 = "42".parse().expect("Not a number!");
println!("guess = {}", guess);
}
6. 學習心得與補充
今天學到Rust的資料型別,我特別有感覺的是它對型別的嚴格要求。和我以前用過的C/C++相比,Rust把每種整數、浮點數的範圍都規定得很清楚,這和昨天學習到的變數設計理念很像,雖然可能因此需要想得更多,但也因為比較嚴謹而能夠規避一些錯誤,並讓我養成良好的寫程式習慣。另外,我覺得最有趣的是char的差別,在C裡char其實就是一個byte,通常只能處理ASCII,但在Rust裡char是四個位元組,可以直接表示Unicode,像是「❤」這種符號也能用單一字元型別存放,這對我來說是一個新鮮的體驗。至於型別推導,我一開始覺得有歧義就報錯讓我在編譯時很麻煩,但想一想這其實也是為了使資料的運用更加嚴謹,避免後續出現難以追蹤的錯誤。整體來說,我開始意識到學習Rust與C/C++的不同:它要我在寫程式的時候先把型別和意圖想清楚,這樣在編譯時就能把很多潛在錯誤擋下來,雖然嚴格但能換來更安心的程式。