iT邦幫忙

0

二、三天學一點點 Rust:來!Tuple、Range、Range Iteration、Generics、(12)

  • 分享至 

  • xImage
  •  

🧠 Tuple(元組)

在 Rust 中,Tuple(元組) 是一種可以打包多個不同型別的值在一起的資料結構。
與陣列(Array)不同的是:Tuple 可以容納不同型別的資料


✅ Tuple 宣告與使用

fn main() {
    let employee = ("Molly", 32, "Marketing");//建立一個包含三個不同型別的元組。
    println!("{:#?}", employee);//用 Debug 格式印出整個元組內容。

    let name = employee.0;
    let age = employee.1;
    let department = employee.2;//使用「點索引法(.0, .1, .2)」取得各個元素。
    println!("Name:{} , Age:{} , Department:{}", name, age, department);

    let (name, age, department) = employee;//使用**解構(Destructuring)**方式一次取出所有元素。
    println!("Name:{} , Age:{} , Department:{}", name, age, department);
}

🧠 Tuple VS Array 差異比較

項目 Tuple(元組) Array(陣列)
型別 可以不同型別 必須全部同型別
長度 固定 固定
存取方式 使用 .0.1.2 依序存取 使用 [索引] 存取
常見用途 小型異質資料組合(如 API 回傳值) 大量同型別資料集合
可讀性 不如 Struct 清楚,依靠順序 比較清楚(資料同型且順序固定)

🧠 範圍(Range)與範圍迭代(Range Iteration)

在 Rust 中,Range(範圍) 是一種可以表示一連串「連續值」的資料結構,通常會搭配迴圈(Loop)來逐一處理範圍中的每個元素,而「迭代(Iteration)」的意思是逐一遍歷集合中的每個元素。


📚 範例程式碼與說明

fn main() {
    let month_days = 1..31;//建立一個從 1 到 30 的範圍(不包含 31)。
    println!("{:?}", month_days);

    let month_days1 = 1..=31;//建立一個從 1 到 31 的範圍(包含 31)。
    println!("{:?}", month_days1);

    for number in month_days {
        println!("{}", number)//迴圈:依序印出從 1 到 30 的每個數字。
    }

    let letters = 'b'..='f';//建立從字元 'b' 到 'f' 的範圍(包含 'f')。
    for letter in letters {
        println!("{}", letter);
    }

    let colors = ["Red", "Green", "Yellow"];//建立一個字串陣列(不是範圍)。
    for color in colors {
        println!("{} is a great color!", color);//直接用 for 搭配陣列元素來遍歷。
    }
}

🧠 Rust 泛型(Generics)基礎:從 Range 看起

在 Rust 中,泛型(Generic) 是一種「延遲決定型別」的語法,
意思是:我們可以先不指定具體型別,而是等到使用時再決定


📦 範例程式碼

fn main() {
    let month_days: std::ops::Range<i32> = 1..31;
    let letters: std::ops::Range<char> = 'b'..'f';
}

✅ 說明:

這兩行程式中使用的是 Rust 標準庫裡的 Range:
Range 是一個範圍資料型別,使用泛型 T 來代表「範圍中的值的型別」。
這個 T 就是所謂的 泛型參數(Generic Type Parameter)。

std:Rust 的標準函式庫(standard library)名稱空間。幾乎所有常用型別與功能都來自這裡。
ops:模組名稱,全稱為 std::ops,代表「運算子支援模組」,定義了像 Range、Add、Mul 等。
Range:Range 是一個結構體(struct),用來表示某個型別的範圍;表示建立一個「i32 型別的範圍」,即從某個整數到某個整數的範圍。

結論

🧠 泛型與物件導向的對應:Overload 與 Polymorphism?

Rust 並沒有傳統的物件導向(像 Java、C++ 那種 class-based OOP),但它實現了類似的核心概念。

OOP 概念 Rust 對應
多載(Overload) ❌ Rust 沒有函數多載,但可以用泛型達到類似效果。
多型(Polymorphism) ✅ 透過 Trait Bound 泛型限制(例如 T: Display)實現多型。
介面(Interface) ✅ 對應 Trait,甚至更強大。

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言