Day 7:第三週總結練習

學習目標

  • 綜合運用所有權、借用、切片
  • 能避開常見的 borrow checker 錯誤
  • 完成一個需要所有權思維的小程式

今日重點

本週核心心智模型

  • 擁有者規則:值有唯一 owner,owner 離開範圍就釋放
  • Move:賦值/傳參會轉移所有權
  • Clone:明確的深拷貝(保留原值)
  • Borrow& 借用,不取所有權
  • 切片:借用一段連續資料

判斷口訣

想「用」資料 → 用借用 &
想「改」資料 → 用 &mut(且不能有人同時借用)
想「擁有」資料 → 用我自己的變數,或用 clone 複製一份

綜合練習:字串處理工具

// 寫一個函式:回傳字串中的第一個與最後一個字
fn first_and_last(s: &str) -> Option<(char, char)> {
    let first = s.chars().next()?;
    let last = s.chars().last()?;
    Some((first, last))
}

fn main() {
    let text = String::from("你好,Rust");
    match first_and_last(&text) {
        Some((f, l)) => println!("First: {}, Last: {}", f, l),
        None => println!("Empty string"),
    }

    // 練習 1:寫一個 reverse_words(s: &str) -> String,
    //         把字串的單字順序反轉("a b c" -> "c b a")
    // 練習 2:寫一個 without_first_word(s: &str) -> &str,
    //         回傳去掉第一個單字後的切片(借用)
}

挑戰

  • 觀察為何 first_and_last&str 可以在傳入 String 後仍能繼續用 text(因為是借用)。

自我檢查

  • 能寫出無 borrow 錯誤的字串函式
  • 理解何時 move、何時 borrow、何時 clone
  • 能正確使用 Option + 切片
  • 對所有權有直覺

週總結

所有權是 Rust 最核心的概念。學會後,你已經比大多只會寫腳本的開發者更懂 Rust 的精髓。