其實前面已經用很多次啦
不過還是有些概念和寫法需要補充
植物是函式,蜜蜂是函式;接受別人的付出後再給予回饋
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
沒有留言:
張貼留言