Rust 程式語言中的函式


函式是程式碼的構建塊。它們使我們能夠避免編寫類似的程式碼,並有助於將大段程式碼組織成可重用的元件。

在 Rust 中,函式隨處可見。甚至函式定義也是 Rust 中的語句。

Rust 中最重要的函式之一是 main 函式,它是任何軟體或應用程式的入口點。

我們在 Rust 中使用 fn 關鍵字來宣告函式。

在 Rust 中,函式的名稱使用蛇形命名法作為約定俗成的風格。在蛇形命名法中,單詞的所有字母都小寫,並且使用 _(下劃線)來分隔兩個單詞。

考慮一個簡單的函式,我們在這個函式中列印“Hello, Tuts!”。

檔名:src/main.rs

示例

 即時演示

fn main() {
   println!("Hello, Tuts!");
}

輸出

上面程式碼的輸出為:

Hello, Tuts!

在上面的程式碼片段中,函式定義以 fn 關鍵字開頭,後跟函式名後的一個括號對。花括號是函式體的一部分,它們告訴編譯器函式體從哪裡開始以及在哪裡結束。

呼叫另一個函式

在 Rust 中呼叫/呼叫函式類似於其同類語言。我們只需要輸入其名稱,後跟括號即可。

以下程式碼片段為例。

檔名:src/main.rs

示例

 即時演示

fn main() {
   sample();
   println!("Hello, Tuts!");
}
fn sample(){
   println!("another function”);
}

輸出

上面程式碼的輸出為:

   Compiling hello-tutorialspoint v0.1.0 (/Users/immukul/hello-tutorialspoint)
   Finished dev [unoptimized + debuginfo] target(s) in 1.04s
   Running `target/debug/hello-tutorialspoint`
another function
Hello, Tuts!

Rust 不在乎你在哪裡定義你正在呼叫的函式,唯一重要的是它應該被定義。

函式引數

引數是在定義函式時放在括號內的值。它們是函式簽名的組成部分。

讓我們稍微修改上面的示例,並將引數傳遞給我們正在呼叫的函式,並看看它是如何工作的。

檔名:src/main.rs

示例

 即時演示

fn main() {
   sample(5);
   println!("Hello, Tuts!");
}
fn sample(x : i32){
   println!("The value of x is : {} ", x);
}

輸出

   Finished dev [unoptimized + debuginfo] target(s) in 0.01s
   Running `target/debug/hello-tutorialspoint`
The value of x is : 5
Hello, Tuts!

我們透過呼叫 sample(5); 來呼叫函式,這反過來又呼叫了具有名為 x 的引數的 sample 函式。引數 x 被分配了型別 i32。然後 println()! 宏列印此引數的值。

需要注意的是,如果在函式括號中定義了多個引數,則所有這些引數都必須宣告型別。

以下程式碼片段作為參考。

檔名:src/main.rs

示例

 即時演示

fn main() {
   sample(5,7);
   println!("Hello, Tuts!");
}
fn sample(x : i32, y : i32){
   println!("The value of x is : {} ", x);
   println!("The value of y is : {} ", y);
}

輸出

   Compiling hello-tutorialspoint v0.1.0 (/Users/immukul/hello-tutorialspoint)
   Finished dev [unoptimized + debuginfo] target(s) in 0.51s
   Running `target/debug/hello-tutorialspoint`
The value of x is : 5
The value of y is : 7
Hello, Tuts

帶有返回值的函式

函式可以返回值給呼叫函式。這是函式非常常見的用例。

檔名:src/main.rs

fn main() {
   let z = sample(5);
   println!("Output is: {}",z);
}
fn sample(x : i32) -> i32{
   x + 1
}

呼叫函式 sample 並傳遞 5 作為引數,然後將該函式返回的值儲存到名為 z 的變數中,最後使用 println()! 宏列印該值。

需要注意的是,如果我們將函式 sample 從表示式更改為語句,則 Rust 編譯器將丟擲編譯錯誤。

檔名:src/main.rs

示例

 即時演示

fn main() {
   let z = sample(5);
   println!("Output is: {}",z);
}
fn sample(x : i32) -> i32{
   x + 1;
}

輸出

Compiling hello-tutorialspoint v0.1.0 (/Users/immukul/hello-tutorialspoint)
error[E0308]: mismatched types
--> src/main.rs:6:23
|
6 | fn sample(x : i32) -> i32{
| ------ ^^^ expected `i32`, found `()`
| |
| implicitly returns `()` as its body has no tail or `return` expression
7 | x + 1;
| - help: consider removing this semicolon
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
error: could not compile `hello-tutorialspoint`

發生這種情況是因為函式 sample 預期返回一個 i32 值,但在其內部,存在一個不計算為值的語句,因此與函式宣告相矛盾。只需刪除分號即可將語句轉換為表示式,程式碼將正常工作。

更新於: 2021年2月20日

214 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告