- Rust 教程
- Rust - 首頁
- Rust - 簡介
- Rust - 環境設定
- Rust - HelloWorld 示例
- Rust - 資料型別
- Rust - 變數
- Rust - 常量
- Rust - 字串
- Rust - 運算子
- Rust - 決策制定
- Rust - 迴圈
- Rust - 函式
- Rust - 元組
- Rust - 陣列
- Rust - 所有權
- Rust - 借用
- Rust - 切片
- Rust - 結構體
- Rust - 列舉
- Rust - 模組
- Rust - 集合
- Rust - 錯誤處理
- Rust - 泛型型別
- Rust - 輸入輸出
- Rust - 檔案輸入/輸出
- Rust - 包管理器
- Rust - 迭代器和閉包
- Rust - 智慧指標
- Rust - 併發
- Rust 有用資源
- Rust - 快速指南
- Rust - 有用資源
- Rust - 討論
Rust - 函式
函式是可讀、可維護和可重用程式碼的構建塊。函式是一組用於執行特定任務的語句。函式將程式組織成邏輯程式碼塊。一旦定義,就可以呼叫函式來訪問程式碼。這使得程式碼可重用。此外,函式使程式程式碼易於閱讀和維護。
函式宣告告訴編譯器函式的名稱、返回型別和引數。函式定義提供了函式的實際主體。
| 序號 | 函式及描述 |
|---|---|
| 1 |
定義函式 函式定義指定了特定任務將如何完成。 |
| 2 |
呼叫函式 必須呼叫函式才能執行它。 |
| 3 |
返回函式 函式還可以將值與控制一起返回給呼叫方。 |
| 4 |
引數化函式 引數是向函式傳遞值的機制。 |
定義函式
函式定義指定了特定任務將如何完成。在使用函式之前,必須先定義它。函式體包含函式應執行的程式碼。函式命名的規則與變數類似。函式使用 **fn** 關鍵字定義。定義標準函式的語法如下所示
語法
fn function_name(param1,param2..paramN) {
// function body
}
函式宣告可以可選地包含引數/實參。引數用於向函式傳遞值。
示例 - 簡單函式定義
//Defining a function
fn fn_hello(){
println!("hello from function fn_hello ");
}
呼叫函式
必須呼叫函式才能執行它。此過程稱為 **函式呼叫**。在呼叫函式時,應傳遞引數的值。呼叫另一個函式的函式稱為 **呼叫函式**。
語法
function_name(val1,val2,valN)
示例:呼叫函式
fn main(){
//calling a function
fn_hello();
}
這裡,main() 是呼叫函式。
圖示
以下示例定義了一個函式 fn_hello()。該函式將訊息列印到控制檯。main() 函式呼叫 fn_hello() 函式。
fn main(){
//calling a function
fn_hello();
}
//Defining a function
fn fn_hello(){
println!("hello from function fn_hello ");
}
輸出
hello from function fn_hello
從函式返回值
函式還可以將值與控制一起返回給呼叫方。此類函式稱為返回值函式。
語法
可以使用以下兩種語法之一來定義具有返回型別的函式。
使用 return 語句
// Syntax1
fn function_name() -> return_type {
//statements
return value;
}
不使用 return 語句的簡寫語法
//Syntax2
fn function_name() -> return_type {
value //no semicolon means this value is returned
}
圖示
fn main(){
println!("pi value is {}",get_pi());
}
fn get_pi()->f64 {
22.0/7.0
}
輸出
pi value is 3.142857142857143
帶引數的函式
引數是向函式傳遞值的機制。引數構成函式簽名的一部分。在呼叫函式期間將引數值傳遞給函式。除非明確指定,否則傳遞給函式的值的數量必須與定義的引數數量匹配。
可以使用以下技術之一將引數傳遞給函式:
按值傳遞
呼叫方法時,將為每個值引數建立一個新的儲存位置。實際引數的值將複製到其中。因此,在被呼叫方法內部對引數所做的更改不會影響實參。
以下示例聲明瞭一個變數 no,它最初為 5。該變數作為引數(按值傳遞)傳遞給 mutate_no_to_zero() 函式,該函式將值更改為零。在函式呼叫後,當控制權返回到 main 方法時,值將保持不變。
fn main(){
let no:i32 = 5;
mutate_no_to_zero(no);
println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(mut param_no: i32) {
param_no = param_no*0;
println!("param_no value is :{}",param_no);
}
輸出
param_no value is :0 The value of no is:5
按引用傳遞
當您按引用傳遞引數時,與值引數不同,不會為這些引數建立新的儲存位置。引用引數表示與傳遞給方法的實際引數相同的記憶體位置。可以透過在變數名前加 **&** 來按引用傳遞引數值。
在下面給出的示例中,我們有一個變數 no,它最初為 5。對變數 no 的引用傳遞給 mutate_no_to_zero() 函式。該函式對原始變數進行操作。在函式呼叫後,當控制權返回到 main 方法時,原始變數的值將為零。
fn main() {
let mut no:i32 = 5;
mutate_no_to_zero(&mut no);
println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(param_no:&mut i32){
*param_no = 0; //de reference
}
* 運算子用於訪問變數 param_no 指向的記憶體位置中儲存的值。這也被稱為解除引用。
輸出將為:
The value of no is 0.
向函式傳遞字串
main() 函式將字串物件傳遞給 display() 函式。
fn main(){
let name:String = String::from("TutorialsPoint");
display(name);
//cannot access name after display
}
fn display(param_name:String){
println!("param_name value is :{}",param_name);
}
輸出
param_name value is :TutorialsPoint