各位好,今天要來介紹的是 Rust 的控制流程那麼其實也就是各位熟悉的 if else for loop 等用法。那就馬上開始吧!
if 就是所有程式語言都一定會有的表達式,就不必多做介紹了直接來看例子吧!
fn main() {
let number = 3;
if number < 5 {
println!("condition was true");
} else {
println!("condition was false");
}
}
看起來沒什麼特別的地方我們可以用之前學到 match 改寫看看,
use std::cmp::Ordering;
fn use_match(number: i32) {
let compare = 3;
match number.cmp(&compare) {
Ordering::Less => println!("Less"),
Ordering::Greater => println!("Greater"),
Ordering::Equal => println!("Equal"),
}
}
數字有 cmp 的方法可以直接做比對這可以少寫很多程式。
Note: 那麼有一個地方要注意 if 陳述只接受 boolean 值所以例如,
fn main() {
let number = 3;
if number {
^^^^^^ expected bool, found integer
println!("number was three");
}
}
這個例子就會報錯。
也就是不能跟 javascript 一樣很懶的隨便丟進去判斷了,這也讓我覺得 js 真的是太不嚴謹的語言了,以後就用 ts 寫好了 XD。
接著來看看多個不同的條件的寫法,
fn mul_condition(number: i32) {
if number % 4 == 0 {
println!("number is divisible by 4");
} else if number % 3 == 0 {
println!("number is divisible by 3");
} else if number % 2 == 0 {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
}
也跟其他語言大同小異。
還記得我們之前提過的 expression 跟 statement 嗎? If 本身也是 expression 所以可以用下面的寫法,
fn use_if_expression() {
let condition = true;
let number = if condition {
5
} else {
6
};
println!("The value of number is: {}", number);
// The value of number is: 5
}
但是注意如果兩個 expression 的型態不同則會報錯,例如,
fn use_if_expression() {
let condition = true;
let number = if condition {
5
} else {
"six"
^^^^^ expected integer, found &str
};
println!("The value of number is: {}", number);
}
5 和 "six" 是不同類型所以在編譯時期就會報錯。
接者我們來看 loop,先舉一個很簡單的例子。
fn main() {
loop {
println!("again!");
}
}
不用執行也能猜到這個 again and again 會跑到天荒地老海枯石爛~
那麼我們接著來看一個比較複雜的例子,
fn loop_result() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {}", result);
// The result is 20
}
這個例子把 loop 跟 expression 的 return 結合然後當加到 10 的時候中斷 loop 再把 10 * 2 所以 result 會是 20。
while 就是有條件的 loop 如果條件符合的話才往下執行否則就會直接中斷,讓我們看個例子,
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
println!("LIFTOFF!!!");
這個很簡單就是如果 number 不等於 0 則把 number 扣到 0 為止。
接著就是每個程式語言都一定有的 for 迴圈而 Rust 的 for 基本上是最常用來處理 collection 的也最安全的用法因為他不用自己控制 index 例如下面的作法是不推薦的,
fn main() {
let a = [10, 20, 30, 40, 50];
let mut index = 0;
while index < 5 {
println!("the value is: {}", a[index]);
index += 1;
}
}
Note: 這是 Rust 不推薦的作法因為我們必須自己控制 index ,而有可能超出範圍讓程式 panic。
因此 Rust 讓我們使用 for 來處理更安全跟簡潔,例如,
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
另外如果我們只是想單純迴圈個幾次則可以這樣寫,
fn main() {
for number in (1..4).rev() {
println!("{}!", number);
}
println!("LIFTOFF!!!");
}
是不是簡潔許多呢?
恭喜各位所有的基礎語法都已經學完了!
下一篇會介紹 Rust 一個非常重要的概念 Ownership,那麼我們明天見!