Rust 學習筆記:一般程式概念(下)
2023年10月1日 · 中文
前言
本系列文書寫我個人初探 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}"); }