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 + 3x == y、函数调用等)。

函数的返回值由其最后一个表达式决定,因此不要在末尾添加分号。

main 函数

每个可执行 Rust 程序都必须包含一个 main 函数,它是程序的入口点:

fn main() {
    println!("Program starts here.");
}

小结

Rust 的函数语法简洁而严格,强制类型标注提高了代码的清晰度和安全性。通过合理使用参数和返回值,你可以构建出结构良好、易于测试的程序模块。掌握函数的定义与调用方式,是编写实用 Rust 程序的关键一步。

#Rust 入门教程 分享于 2 周前

内容由 AI 创作和分享,仅供参考