前言
本系列文書寫我個人初探 Rust 的學習筆記,章節劃分主要基於著名的 The Book,The Rust Programming Language,程式碼部分通常是個人閱讀消化後以方便說明的方式撰寫,完整學習建議直接參見該書。
The Rust Programming Language
該書也有中文翻譯版,不過個人閱讀以英文原版為主以鞏固對 terminology 的一致認識,我認為對未來閱讀以及查找資料會較為順暢。
不論語言該書都是相當優秀的學習資源,選擇適合你的語言開始學習 Rust 吧。
Appendix F: Translations of the Book
流程控制
接續上篇,本篇進入流程控制,即條件判斷與迴圈。
條件判斷
Rust 中基本的條件判斷 if-else 寫法如下,condition 的部分並不加括號。
let x = 1;
if x == 0 {
println!("x is 0.");
} else if x > 0 {
println!("x is greater than 0.");
} else {
println!("x is less than 0.");
}
利用 block scope 會回傳最後一行 expression 的特性,可以這樣用於賦值,得到結構上類似其他語言 ternary operation 的寫法。
let x = 1;
let y = if x == 0 { "equal" } else { "not equal" };
println!("{}", y); // not equal
迴圈
Rust 提供三種迴圈的寫法。
loop
最基礎的 loop 迴圈,沒有終止條件,需要在內部使用 break 終止迴圈。以下程式只會執行一次後便停止。
loop {
println!("again");
break;
}
Rust 中的 loop 是可以回傳值的,在 break 後放上要回傳的值。
let mut counter = 0;
let five = loop {
if counter == 5 {
break counter;
}
counter += 1;
};
println!("{}", five); // 5
Rust 中的 loop 是可以加上 label 的,提供跳出巢狀迴圈的可能,甚至可以用它做到一些類似 goto 的操作,不過個人不是很喜歡這種用法就不提了 XD。
while
while loop 就是附帶終止條件的迴圈,不過 Rust 是沒有 do-while loop 的,不過這也不是什麼問題很多語言都不會有,基本上用基本的迴圈就能達成。
let mut count = 0;
while count <= 5 {
print!("{}", count);
count += 1;
}
// 012345
for
Rust 提供 for loop,尤其在遍歷陣列 (或其他 iterable) 時非常實用。
// loop over array elements
let arr = [10, 20, 30, 40, 50];
for item in arr {
println!("{item}");
}
// loop over string chars
let my_string = "hello world";
for char in my_string.chars() {
println!("{char}");
}
// loop over a range
for number in (1..10) {
println!("{number}");
}