课程名称:领略Rust之美,挑战双高语言
课程章节: 第4章 Rust 流程控制 4-10 函数与方法
课程讲师:叶枭
课程内容:
今天学习的内容是 Rust 中的函数。
函数,和 if 条件控制,while、loop、for 循环控制,在底层都是使用跳转实现的,所以函数也属于流程控制的一种。可以这样理解,当函数执行时,程序的执行主体就进入了函数内部,当函数执行完毕,则又返还回去,这就是函数的流程控制。
Rust 中使用函数和 Typescript 比较像,需要关注参数的类型和返回值的类型, 再就是有一点 Rust 语言的特性,返回值可以是一个表达式。
参数的类型注解和变量是一样的,在参数名为使用冒号 :
指定类型,返回值的类型使用箭头 ->
表示。如果函数没有返回值,则可以省略。
比如一个斐波那契数列函数:
fn fibonacci(n: u64) -> u64 { if n < 2 { return n; } return fibonacci(n - 1) + fibonacci(n - 2); } fn main() { println!("斐波那契数列的第 10 项是:{:?}", fibonacci(10)); // 55 }
前面说过,Rust 是基于表达式的,函数中也能用到这个特性。一般函数都会使用 return
来结束函数的调用和返回值。Rust 中的函数,如果没有 return,默认会将最后一个表达式的值作为函数的返回值,所以上面的斐波那契数列函数可以写成:
fn fibonacci(n: u64) -> u64 { if n < 2 { n } else { fibonacci(n - 1) + fibonacci(n - 2) } }
函数没有返回值时,可以省略返回值的类型,或者写成 ()
:
fn log1(message: &str) { println!("{}", message); } fn log2(message: &str) -> () { println!("{}", message); } fn main() { let message = "测试"; log1(message); log2(message); }
课程收获
这节课学习了 Rust 中的函数类型,从程序执行的角度看,它也属于流程控制的一种。但更多时候我们只把函数看作是对一个功能的封装。Rust 具备函数式编程的特性,所以函数是 Rust 中的重中之重。