Rust 語言基礎
三、函數
1、基本概念
1.1、定義
- Rust 語言使用關鍵字 fn 來定義函數,如:fn test(){…};
1.2、命名規範
- Rust 代碼中的函數和變量名使用 snake case 規範風格。在 snake case 中,所有字母都是小寫并使用下劃線分隔單詞。
- 例子:
fn main() { println!("Hello, world!"); another_function(); } fn another_function() { println!("Another function."); }
- 由上面的例子,也可以看出,Rust 語言對函數的聲明定義的位置沒有嚴格要求,隻要聲明定義了就行,在主調函數前面或後面都可以。
2、函數參數
- Rust 語言的函數也分為帶參函數和無參函數,帶參函數的聲明形式如下:
fn 函數名(形參:參數類型){函數體}; // 例子: fn function(x: i32) { println!("The value of x is: {}", x); }
- 在 Rust 語言,聲明函數時必須聲明每個參數的類型,如果是含參函數,當參數清單中不止一個參數時,像其他程式設計語言一樣,Rust 也使用 “,” 來分隔。例如:
fn another_function(x: i32, y: i32) { println!("The value of x is: {}", x); println!("The value of y is: {}", y); }
3、函數體
- 函數體由一系列的語句和一個可選的結尾表達式構成。例子:
fn main() { let y = 6; } fn main() { let x = 5; let y = { let x = 3; x + 1 }; println!("The value of y is: {}", y); }
- 在第二例子中,将一個代碼塊指派給了 y,這是 Rust 語言裡特有的;而且,在代碼塊裡的最後一行 ”x+1“ 并沒有用分号結尾,這就是一個表達式;表達式的結尾沒有分号。如果在表達式的結尾加上分号,它就變成了語句,而語句不會傳回值。
4、函數傳回值
- Rust 的函數也有無傳回值和有傳回值的差別,有傳回值的函數生命形式如下:
fn fun_name() -> i32{....} // fn 函數名() -> 傳回值類型{函數體} // 例子: fn double() -> f64 { PI } fn main() { println!("Hello, world!"); another_function(); function(520); function1(18,'R'); let num = double(); println!("The value of num is {}",num); } //輸出: /* Hello, world! Another function. The value of x is: 520 The value of x is: 18 The value of y is: R The value of num is 3.141592653589793 */
- 帶傳回值的函數,必須不以語句結尾,因為語句并不會傳回值;必須以符合傳回值類型的表達式結尾,下面是一個待傳回值的函數的錯誤寫法:
fn plus_one(x: i32) -> i32 { x + 1; } // 錯誤資訊: /* fn plus_one(x: i32) -> i32 { | -------- ^^^ expected i32, found () | | | this function's body doesn't return 33 | x + 1; | - help: consider removing this semicolon | = note: expected type `i32` found type `()` */
四、注釋
- Rust 語言使用雙斜杆 “//” 和 “” 作為注釋符,雙斜杆之後的一整行字元 Rust 編譯器都不執行。雙斜杆是行注釋符.
- ”“ 是塊注釋符。
- 示例:
/* 有傳回值,傳回值為實數圓周率 */ // -> 傳回值類型