iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
Rust

Rust 30 天養成計畫:從零到 CLI 專案系列 第 3

Day 3:資料型別與型別推導

  • 分享至 

  • xImage
  •  

Rust是一個靜態型別語言,但同時支援型別推導。這代表在編譯時,所有變數的型別都是確定的,不能像Python那樣能隨意更改。

1. 整數型別 (Integer)
整數有分帶號 (signed) 與無號 (unsigned),常見的型別如下(如圖):
https://ithelp.ithome.com.tw/upload/images/20250917/20178873hxW8hYGSRa.jpg
預設是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++的不同:它要我在寫程式的時候先把型別和意圖想清楚,這樣在編譯時就能把很多潛在錯誤擋下來,雖然嚴格但能換來更安心的程式。


上一篇
Day 2:變數、不可變性、可變性與 Shadowing
下一篇
Day 4:函數與表達式
系列文
Rust 30 天養成計畫:從零到 CLI 專案5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言