控制流程
控制流程決定程式碼何時、重複幾次執行。Rust 提供 if、三種迴圈(loop、while、for)與強大的 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
條件成立時持續執行:
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 集,介紹 loop、while 與 for,對應本頁「迴圈」一節。
下一頁:函式。