Rust的函數用fn宣告,它強調「回傳值」與「表達式」的使用方式。此外,Rust也建議函數名稱使用 snake_case(底線小寫)。
1. 基本函數
fn main() {
println!("Hello from main!");
another_function();
}
fn another_function() {
println!("Hello from another function!");
}
輸出:
Hello from main!
Hello from another function!
2. 帶參數的函數
Rust的函數參數必須標明型別,否則無法編譯。
fn main() {
print_number(10);
}
fn print_number(x: i32) {
println!("The number is: {}", x);
}
輸出:
The number is: 10
3. 有回傳值的函數
函數回傳值使用 -> 指定型別,最後一行表達式(沒有分號)會自動當作回傳值。
fn main() {
let result = add(5, 7);
println!("5 + 7 = {}", result);
}
fn add(a: i32, b: i32) -> i32 {
a + b // 沒有分號 → 表達式,作為回傳值
}
輸出:
5 + 7 = 12
4. 表達式與語句
在 Rust 中,語句 (statement) 代表執行一個動作,不會產生值,表達式 (expression) 則會回傳一個值,可以用來指定給變數。
fn main() {
let y = {
let x = 3;
x + 1 // 沒有分號 → 表達式,結果是 4
};
println!("y = {}", y);
}
輸出:
y = 4
在 Rust 中,幾乎所有東西都是表達式,包括 if 與 match,這和 C/C++ 不太一樣。
5. 學習心得與補充
今天學到的函數和表達式讓我更清楚Rust的程式架構。和C/C++ 相比,Rust要求函數的參數型別一定要寫清楚,讓程式更安全也更容易閱讀。最讓我感到新奇的是表達式的概念,在其他語言我習慣用 return來回傳值,但在Rust中只要把最後一行寫成沒有分號的表達式,它就會自動當作回傳值,讓程式碼更簡潔。雖然剛開始會不太習慣,但發現不同語言間這些微小的不同處正是讓我感到有趣的部分。加上Rust 把if和match也設計成表達式,讓我對這個語言有更深的了解,也激起我對這個語言更多的好奇。