107.05.06 rust 之路 07 流程控制

Rust 的,應該說大部分語言的流程控制都相近
我盡量簡單帶過重複的部分 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、for

loop

無限迴圈,直到 break
break 後面可以加數值當作回傳
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

沒有留言:

張貼留言

^ Top