OS: Windows 10
Editor: Visual Studio Code
Rust version: 1.63.0
如同之前一樣,對於一些明確會是在其他地方已經碰過的相關主題,我會先想想我會需要什麼來快速的認識這個主題,控制流程(control flow)有寫過程式的應該都不陌生,陌生的可能是「控制流程」這四個字,其實就是我們很常在用的if..else
、for loop
之類的。
下面是清單:
if..else if..else
switch..case..
while
loopfor
loopif
...else if
...else
首先,先用一道老題目來試試看,判斷閏年,下面是題目:
西元年份除以4不可整除,為平年。
西元年份除以4可整除,且除以100不可整除,為閏年。
西元年份除以100可整除,且除以400不可整除,為平年
西元年份除以400可整除,為閏年。
以下是實作:
let year = 2022;
if (year % 4) != 0 {
println!("平年");
} else if (year % 4 == 0) && (year % 100 != 0) {
println!("閏年");
} else if (year % 100 == 0) && (year % 400 == 0) {
println!("平年");
} else if year % 400 == 0 {
println!("閏年");
}
OK!看起來跟其他語言沒有太多的差別。
match
在Rust中,並沒有switch..case..
關鍵字,取而代之是用match
。
以下是官方的example:
let num = 19;
match num {
0 => println!("Zero!"),
1 => println!("One!"),
2 | 3 | 5 | 7 | 11 => println!("This is a prime."), // 分散的
13..=19 => println!("A teen."), // 連續的,[13, 19]
_ => println!("Nothing special."),
}
可以知道幾件事:
match
的使用方法default
的狀態如何處理,_
是Rust裡的default
while
while
的話,跟其他我所認識的語言沒甚麼不同:
let mut count_down = 3;
while count_down > 0 {
println!("{}!", count_down);
count_down -= 1;
}
println!("發射!!!");
for
loop在前一篇靜態陣列其實就有看到for
loop的身影,而且這應該是最常用到的到迴圈語法了吧,跟while
來比的話。
一樣用一個陣列來做實驗,今天想簡單一點,前一篇輸出矩陣的用法,之後後面有談**Rust的集合(collection)**再做應該也不遲。
let arr = [1, 2, 3, 4, 5, 6, 7];
// 陣列index從頭到尾
for index in 0..arr.len() {
println!("index {} is {}", index, arr[index]);
}
// 陣列利用iterator從頭到尾
let mut index = 0;
for element in arr {
println!("index {} is {}", index, element);
index += 1;
}
// 陣列index從0到3
for index in 0..4 {
println!("index {} is {}", index, arr[index]);
}
// 陣列index從0到4
for index in 0..=4 {
println!("index {} is {}", index, arr[index]);
}
// Reverse! index從3到0
for index in (0..4).rev() {
println!("index {} is {}", index, arr[index]);
}
loop
這個在其他語言就沒有看過了,看起來是Rust獨有的關鍵字,用法如下:
// 顯示出 1 ~ 10
let mut x = 0;
loop {
x += 1;
println!("Number => {}", x);
if x >= 10 {
break;
}
}
loop
他是屬於無限迴圈,只要呼叫就會開啟一直跑,除非碰到條件然後break
出去。
let
陳述式與判斷句、迴圈的合併使用有時會遇到像這樣的問題,會是這樣的寫法,以判斷正負數為範例:
let num = -99;
let mut sign: i8 = 0;
if num < 0 {
sign = -1;
} else {
sign = 1;
}
但在Rust裡面,我們可以這樣寫,更簡潔:
let num = -99;
let sign = if num < 0 { -1 } else { 1 }; // 記得semicolon
println!("正負數? {}", sign);
loop
的話,也可以這樣使用,在break
之後回傳我們要的值,以下是文件的範例:
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
}; // 記得semicolon
println!("結果為:{}", result);
官方教程(非官方中文翻譯) - 控制流程
Rust by example - match