我盡量簡單帶過重複的部分 OuO
人生像充滿迴圈,每個迴圈又是不斷的選擇,一天,一年,一生
Photo by Patrick McManaman on Unsplash |
選擇結構
關鍵字:if、else if、else判斷條件必須要是 boolean ( C 家族可以用數字)
不須用 () 包住條件
fn main() { let x = 3; if x == 1 { println!("1"); } else if x == 2 { println!("2"); } else { println!("other"); } }
可以有回傳值,一樣搭配 Expression,但注意型別要一樣
fn main() { let x = 3; let y = if x % 2 == 1 { 1 } else { 2 }; println!("{}", y); // 1 }
迴圈
Rust 的迴圈有三種:loop、while、forloop
無限迴圈,直到 breakbreak 後面可以加數值當作回傳
let mut y = 1; let x = loop { if y > 3 { break 7; } y += 1; }; println!("{}", x); // 7
while
條件一樣不需要加 ()e.g. 倒數 3! 2! 1!
let mut number = 3; while number != 0 { println!("{}!", number); number = number - 1; }
for
比較像 foreach,跟 python 頗像沒有像 C 家族那樣提供 index 去對元素操作,因為手動操作很容易出錯
e.g. C++ 錯誤 code
這個程式可以編譯執行,執行結果是:2 3 4 5 0,最後一個 0 是哪裡跑出來的呢? OuO
int a[] = {1, 2, 3, 4, 5}; for (int i = 1; i <= 5; i++) { printf("%d\n", a[i]); }
所以 Rust 要避免這種危險的動作發生
主要用途是尋訪,操作有長度的物件而較不會超出邊界發生 panic
語法如下:其中 expression 必須要能轉成 iterator
for var in expression {
code
}
e.g. 從 0 數到 9
for x in 0..10 { println!("{}", x); }
Enumerate
如果想要得到目前元素的索引 (index),Rust 有提供另外一個函式enumerate()前面就可以用 tuple 同時接收 index 和尋訪的數值
for (index, value) in (5..10).enumerate() { println!("index = {} and value = {}", index, value); }
Labels
另外 for 迴圈也有提供 label,這功能 Java 也有提供對多層迴圈操作可以用較直觀的寫法
標籤命名記得先加單引號 (')
'outer: for x in 0..10 { 'inner: for y in 0..10 { if x % 2 == 0 { continue 'outer; } if y % 2 == 0 { continue 'inner; } println!("x: {}, y: {}", x, y); } }
再來連續三篇都是重點喔
下一篇是重點中的重點,會考喔 (x
敬請期待 所有權!!!! OuO
沒有留言:
張貼留言