Day 1:結構體(Structs)

學習目標

  • 定義帶欄位的結構體
  • 用結構體建立資料物件
  • 理解欄位的所有權類型

今日重點

定義與建立

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let mut user = User {
        username: String::from("john"),
        email: String::from("john@example.com"),
        sign_in_count: 1,
        active: true,
    };
    println!("{} ({})", user.username, user.email);
    user.active = false;   // 欄位可變(需整個 user 是 mut)
}

建構簡寫(欄位名與變數名相同)

fn make_user(username: String, email: String) -> User {
    User {
        username,        // 等於 username: username
        email,
        sign_in_count: 1,
        active: true,
    }
}

其他結構形式

// 元組結構
struct Color(u8, u8, u8);
let black = Color(0, 0, 0);
println!("{}", black.0);

// 單位結構(沒有資料,用於 trait 標記)
struct AlwaysEqual;

練習

struct Book {
    title: String,
    author: String,
    pages: u32,
}

fn main() {
    let book = Book {
        title: String::from("The Rust Book"),
        author: String::from("Steve Klabnik"),
        pages: 532,
    };
    println!("{} by {}, {} pages", book.title, book.author, book.pages);
}
1. 建一個 Book 結構並印出。 2. 用建構簡寫寫一個能建立 Book 的函式。

自我檢查

  • 能定義 struct 並建立實例
  • 知道元組結構與單位結構
  • 理解結構體欄位保有所有權

深入連結

  • The Book 第 5 章「Defining and Instantiating Structs」