2.3 函数定义与调用
听
函数是 Rust 程序的基本组成单元。通过将逻辑封装在函数中,代码变得更加模块化、可读和可复用。Rust 中的函数使用 fn 关键字定义,其命名惯例采用蛇形命名法(snake_case)。
基本函数定义
一个最简单的函数如下所示:
fn greet() {
println!("Hello from a function!");
}
该函数名为 greet,不接受任何参数,也没有返回值。调用它只需写出函数名加括号:
greet();
函数参数
函数可以接收参数,每个参数必须显式标注类型。例如:
fn print_number(x: i32) {
println!("The number is: {}", x);
}
fn add(x: i32, y: i32) {
println!("Sum is: {}", x + y);
}
调用时需提供对应类型和数量的实参:
print_number(42);
add(10, 20);
Rust 的参数传递默认采用“移动”(move)或“借用”(borrow)语义,具体行为取决于类型的特性,这将在后续章节详细讨论。
返回值
函数可以通过 -> 指定返回类型。注意:返回值没有名称,只写类型。函数体中的最后一个表达式(不带分号)即为返回值;也可以使用 return 关键字提前返回,但通常不必要。
fn five() -> i32 {
5
}
fn multiply(x: i32, y: i32) -> i32 {
x * y // 注意:这里没有分号
}
调用并使用返回值:
let x = five();
let result = multiply(3, 4);
println!("x = {}, result = {}", x, result);
如果在返回表达式后加上分号,它就变成了语句,不再作为返回值,这会导致类型不匹配错误:
fn bad_five() -> i32 {
5; // 错误!这是一条语句,返回的是 ()
}
表达式与语句
理解 Rust 中“表达式”和“语句”的区别对正确编写函数至关重要:
- 语句(statement)执行操作但不返回值(如
let x = 5;); - 表达式(expression)计算并产生一个值(如
5 + 3、x == y、函数调用等)。
函数的返回值由其最后一个表达式决定,因此不要在末尾添加分号。
main 函数
每个可执行 Rust 程序都必须包含一个 main 函数,它是程序的入口点:
fn main() {
println!("Program starts here.");
}
小结
Rust 的函数语法简洁而严格,强制类型标注提高了代码的清晰度和安全性。通过合理使用参数和返回值,你可以构建出结构良好、易于测试的程序模块。掌握函数的定义与调用方式,是编写实用 Rust 程序的关键一步。
#Rust 入门教程
分享于 2 周前
上一篇:2.2 数据类型:标量与复合类型
下一篇:2.4 控制流