Rust Note(5)_if_else_match

if else, if else if 條件判斷

如同其他語言一樣, Rust 也是有流程控制 Control Condition Flow
使用的原則是, 只要有一個符合使用者所設定的條件, 那下方的判斷就不再執行.

if, else 若…則…

這是最簡單的, 若非 A 則 B.

範例如下 :

1
2
3
4
5
6
7
8
9
10
11
fn main() {
let a: i64 = 32;
let b: i64 = 64;
if a != b {
println!("a is not equal to b!");
} else {
println!("a is equal with b!");
}
}

// output : a is not equal to b!

Flow 如下:

  1. 先宣告兩個變數 a and b, 且指定其形態
  2. 做兩個對比比較
  3. != 運算符 : 不等於
  4. if <condition 1> condition 1 條件滿足成立 , 執行後面的運算
  5. 後面的 else 就不會再被執行

修改一下上面的範例 :

1
2
3
4
5
6
7
8
9
10
11
fn main() {
let a: i64 = 32;
let b: i64 = 64;
if a == b {
println!("a is not equal to b!");
} else {
println!("a is equal with b!");
}
}

// output : a is equal with b!

!= 換成 ==
那結果就變成 if <condition 1> 不成立 , 就繼續往下執行 else 語句

當然, 世界如果有這麼美好就好了, 絕對不可能只有單純兩個判斷………..

那如果狀況很多呢? How can I do?????????


if, else if, …, else; else if 派上用場了!!!

不囉嗦, 直接上範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn main() {
let a: i64 = 32;
let b: i64 = 64;
if a == b {
println!("result 1");
} else if a > b {
println!("result 2");
} else if a >= b {
println!("result 3")
} else {
println!("result 4")
}
}

// output : result 4

啾竟發生何事?

  1. 宣告變數
  2. 開始條件判斷
    2-1. <condition 1> : a 不等於 b
    2-2. <condition 2> : a 大於 b
    2-3. <conditoin 3> : a 大於等於 b
  3. condition 1, 2, 3 都為 false 都不成立……..
  4. 所以最後輸出結果為 else 裡面的運算語句.

如果多了這麼多的條件判斷, 是不是可變化性變更多了?

Match 語句 (Like C switch 語句)

如果條件很多, 寫一大堆 if else…….是不是會更亂?????????

那我們用 match 看看~

1
2
3
4
5
6
7
8
9
10
11
12
fn main() {
let s_name: &str = "KB"; // Using &str
let f_name = match s_name {
"KJ" => "Kylls Jellies",
"KD" => "Kylls Dellies",
"KB" => "Kylls Bellies",
_ => "Unknown"
};
println!("Hi {}, Your name is {}.", s_name, f_name);
}

// output : Hi KB, Your name is Kylls Bellies.

來看一下作用的 flow:

  1. f_name 有多個條件, “KJ”, “KD”, “KB”
  2. 使用 match 這關鍵字, 啟動媒合功能?????
  3. 只要裡面有對應到的, 就會=> 值返回給 f_name
  4. _ => value 代表都比對不到, 那就返回 Unknown.

有沒有發現 match 跟 C, Java 其他語言的 switch 很像呢?


Rust Note_20211023_1.2