🎯前言
函数在 Rust 代码中非常普遍。你已经见过语言中最重要的函数之一:
main
函数,它是很多程序的入口点。你也见过fn
关键字,它用来声明新函数。Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。
如:
fn main() { println!("Hello, world!"); another_function(); } fn another_function() { println!("Another function."); }
🎯函数的参数
我们可以定义为拥有 参数(parameters)的函数,参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。
提醒:函数参数类型必须声明。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器再也不需要你在代码的其他地方注明类型来指出你的意图。而且,在知道函数需要什么类型后,编译器就能够给出更有用的错误消息。
fn main() { print_labeled_measurement(5, 'h'); } fn print_labeled_measurement(value: i32, unit_label: char) { println!("The measurement is: {value}{unit_label}"); }
🎯语句与表达式
语句(Statements)是执行一些操作但不返回值的指令。
表达式(Expressions)计算并产生一个值。表达式会计算出一个值,并且你将编写的大部分 Rust 代码是由表达式组成的。
fn main() { let y = { let x = 3; x + 1 }; println!("The value of y is: {y}"); }这个表达式:
{ let x = 3; x + 1 }
是一个代码块,它的值是 4。这个值作为 let 语句的一部分被绑定到 y 上。注意 x+1 这一行在结尾没有分号,与你见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值。在接下来探索具有返回值的函数和表达式时要谨记这一点。
🎯函数的返回值
函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(
->
)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用return
关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。例子:
fn five() -> i32 { 5 } fn main() { let x = five(); println!("The value of x is: {x}"); }