Rust 的控制流程包含條件判斷與各種迴圈,另外還有強大的 match 語法。Rust 特別強調「表達式」,因此在控制流程中也能直接把結果當值使用,這和 C/C++ 有些不同。今天先學習 if 與三種迴圈 (loop, while, for)的用法。
1. if 條件判斷
在 Rust 中,if 條件必須是布林值 (bool),不能像 C 那樣把整數當條件使用。
fn main() {
let number = 5;
if number < 10 {
println!("number < 10");
} else {
println!("number >= 10");
}
}
輸出:
number < 10
if 也是表達式,所以可以直接回傳值:
fn main() {
let condition = true;
let value = if condition { 1 } else { 0 };
println!("value = {}", value);
}
輸出:
value = 1
2. loop 無窮迴圈
loop 會一直執行,除非遇到 break。
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 3 {
break counter * 2; // break 後可回傳值
}
};
println!("result = {}", result);
}
輸出:
result = 6
3. while 條件迴圈
和其他語言相似,只要條件為 true 就會繼續跑。
fn main() {
let mut number = 3;
while number > 0 {
println!("{}", number);
number -= 1;
}
println!("Liftoff!");
}
輸出:
3
2
1
Liftoff!
4. for 迴圈
for 通常用來遍歷集合或範圍 (range)。
fn main() {
for number in 1..4 {
println!("{}", number);
}
}
輸出:
1
2
3
還可以搭配 rev() 倒序:
fn main() {
for number in (1..4).rev() {
println!("{}", number);
}
}
輸出:
3
2
1
5. 學習心得與補充
今天學到的控制流程我覺得最有趣的部份是關於loop可以直接用break傳回一個值,是我之前在其他語言中沒有看到過的,感覺Rust真的把一切皆表達式的理念發揮得很徹底。for迴圈的寫法也比C++的更加簡潔,C++的傳統for迴圈需要寫出初始化、條件、更新三個部分,看起來很直觀,但也比較冗長,Rust 則是直接用範圍或集合來表示,少打許多程式碼,配合 rev() 也能方便地做倒序。整體來說,我個人比較喜歡Rust的簡單明瞭。