跳轉至

建立 2026-09-19 更新 2026-09-19

控制流程

控制流程決定程式碼何時、重複幾次執行。Rust 提供 if、三種迴圈(loopwhilefor)與強大的 match。本頁涵蓋前三者,match 只做入門,完整用法見 列舉與模式比對

if 運算式

條件必須是 bool,Rust 不會像 JavaScript 或 C 那樣把數字自動當成真假值:

fn main() {
    let score = 82;

    if score >= 90 {
        println!("優等");
    } else if score >= 60 {
        println!("及格");
    } else {
        println!("不及格");
    }
}

if運算式(expression),會回傳值,所以可以直接賦值給變數。各分支的型別必須相同:

fn main() {
    let is_member = true;
    let price = if is_member { 80 } else { 100 };
    println!("{price}");
}

迴圈

loop

無限迴圈,用 break 跳出,而且 break 可以帶出一個值:

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;
        if counter == 10 {
            break counter * 2;
        }
    };

    println!("{result}");
}

while

條件成立時持續執行:

fn main() {
    let mut n = 3;
    while n > 0 {
        println!("{n}");
        n -= 1;
    }
    println!("發射!");
}

for

最常用,用來走訪範圍或集合。0..5 包含 0 到 4,0..=5 則包含 5:

fn main() {
    for i in 0..3 {
        println!("i = {i}");
    }

    let fruits = ["蘋果", "香蕉", "橘子"];
    for fruit in fruits {
        println!("{fruit}");
    }

    for (index, fruit) in fruits.iter().enumerate() {
        println!("{index}: {fruit}");
    }
}

優先用 for

for 不需要自己管理索引,也不會發生越界錯誤,是走訪集合的首選。

迴圈標籤

巢狀迴圈時,可以用標籤(label)指定要跳出哪一層:

fn main() {
    'outer: for i in 0..3 {
        for j in 0..3 {
            if i * j == 2 {
                println!("找到 {i} × {j}");
                break 'outer;
            }
        }
    }
}

match 入門

match 把一個值與多個模式(pattern)比對,執行第一個符合的分支。編譯器會要求你涵蓋所有可能,漏掉就無法編譯:

fn main() {
    let n = 7;

    let kind = match n {
        0 => "零",
        1..=5 => "小",
        6..=9 => "中",
        _ => "大", // _ 表示其餘所有情況
    };

    println!("{kind}");
}

推薦影音

if/else 與 match

簡述:微軟《Beginner's Series to Rust》第 19 集,說明條件判斷與 match 的寫法。

迴圈

簡述:同系列第 21 集,介紹 loopwhilefor,對應本頁「迴圈」一節。

下一頁:函式