课程名称:领略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 中的重中之重。