Day 4:回傳多個值與 Option 回傳

學習目標

  • 用 tuple 回傳多個值
  • 理解 Option 的基本概念
  • 學會 return 提前結束函式

今日重點

用 Tuple 回傳多個值

fn divide(a: f64, b: f64) -> (f64, bool) {
    if b == 0.0 {
        (0.0, false)
    } else {
        (a / b, true)
    }
}

fn main() {
    let (quotient, success) = divide(10.0, 3.0);
    println!("10 / 3 = {} (success: {})", quotient, success);
}

提前回傳(return)

fn find_even(numbers: &[i32]) -> Option<i32> {
    for &num in numbers {
        if num % 2 == 0 {
            return Some(num);   // 找到就立刻回傳
        }
    }
    None   // 沒找到,回傳 None
}

Option 初體驗

  • Some(value):有值
  • None:沒有值
  • match 解開
fn main() {
    let numbers = vec![1, 3, 5, 8, 9];
    match find_even(&numbers) {
        Some(even) => println!("Found even: {}", even),
        None => println!("No even number found"),
    }
}

練習

  1. 寫一個函式 min_max(nums: &[i32]) -> (i32, i32) 回傳最小和最大值。
  2. 寫一個 first_char(s: &str) -> Option<char>,空字串回 None

自我檢查

  • 會用 tuple 一次回傳多個值
  • 理解 Some / None 的意義
  • 知道 return 可以提前跳出函式
  • 能用 match 解開 Option