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
廣告

© . All rights reserved.