天天看點

Rust語言基礎—函數與注釋Rust 語言基礎

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 編譯器都不執行。雙斜杆是行注釋符.
  • ”“ 是塊注釋符。
  • 示例:
    /*
    有傳回值,傳回值為實數圓周率
    */
    //  -> 傳回值類型