107.05.06 rust 之路 06 函式

來了 Function OuO
其實前面已經用很多次啦
不過還是有些概念和寫法需要補充

植物是函式,蜜蜂是函式;接受別人的付出後再給予回饋
Photo by Danilo Batista on Unsplash


關鍵字:fn 函數名稱([參數]) [-> 回傳值] {/* 函數本體 */}
[] 表示內容可有可無可多個,所以可以沒有參數、回傳值,也可多個、多種,用 "," 分隔
傳入的型別必須標示
函數名稱命名規則使用 snake case (小寫字母 + 數字 + 底線)
main 函式為程式進入點
e.g. 1.
fn print_foo() {
    println!("foo");
}

e.g. 2. 有參數
fn print_x(x: i32) {
    println!("{}", x);
}

e.g. 3. 有參數有回傳值
fn get_x_plus_1(x: i32) -> i32 {
    x + 1
}

e.g. 4. 有多個參數有回傳值
fn get_x_plus_y(x: i32, y:i32) -> i32 {
    x + y
}

Parameter v.s. Argument

都翻譯成參數 @@
但不一樣 !!!!

Parameter

/pə`ræmitɚ/ (別念錯啊,雖然教授都念 /`pærəmitɚ/)
全名 formal parameter函式定義中規定要傳入的變數型別,並且在函式中可被使用
fn foo(x: i32) {
       ^^^^^^ 
}

Argument

全名 actual argument,也有人翻譯成引數
呼叫函式時傳入的實際數值
foo(5);
    ^

Statement v.s. Expression

Statement 陳述式

主要在陳述一件對的事情,說完後句號,沒有回傳值
所以 Statement 的結束有 ";"

Expression 表達式

沒有 ";" 因此有回傳值 (本身運算完後即是回傳值)
這也是為什麼前面函式可以用最後沒加 ";" 的一行當作回傳值了
但是還是可以用 return x; 這個 Statement 來陳述說要回傳 x 這個變數的數值

e.g. 1. 實現 C++ 中的 int x = y = 3;
// let x = (let y = 6); --> error 因為使用 let 宣告變數是 Statement
let y = {
    let x = 3; // 缺點是 x 出 block 後就不能使用
    x          // Expression
};
-
Statements and expressions

內部函式

不可以存取外部函式的變數
fn error_access(x: i32) {
    fn inner() {
        println!("{}", x); // error
    }
}

但還是可以用傳參數方式使用
fn get_x_plus_1(x: i32) -> i32 {
    fn inner(x: i32) -> i32 {
        x + 1  // Expression
    }
    inner(x)   // Expression
}


下一篇流程控制控起來 OuO

沒有留言:

張貼留言

^ Top