Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • 搜索未来:SEO与GEO双引擎实战手册
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • Rust 开发入门
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • 搜索未来:SEO与GEO双引擎实战手册
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • Rust 开发入门
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain

3.1 函数定义与调用

函数是组织代码的基本单元,它允许你将一段特定的逻辑封装起来,并在需要时重复使用。在 Rust 中,函数无处不在,从程序入口 main 函数到各种自定义功能,都离不开函数。

3.1.1 函数的基本定义

在 Rust 中,使用 fn 关键字来定义一个函数。函数名通常使用蛇形命名法(snake_case),即所有字母小写,单词之间用下划线分隔。

一个最简单的函数定义如下:

fn greet() {
    println!("Hello, world!");
}

这个函数名为 greet,没有参数,也没有返回值。它的函数体包含在花括号 {} 中,执行一条打印语句。

3.1.2 函数的调用

定义好函数后,只需在函数名后加上一对圆括号 () 即可调用它。

fn main() {
    println!("程序开始...");
    greet(); // 调用 greet 函数
    println!("程序结束...");
}

fn greet() {
    println!("你好,Rust!");
}

注意: Rust 不关心函数定义在调用之前还是之后,只要它在当前作用域内可见即可。这与一些需要前向声明的语言(如 C/C++)不同。

3.1.3 函数体与表达式

Rust 是一个基于表达式的语言,这一点在函数体中体现得非常明显。

  • 语句(Statements): 是执行一些操作但不返回值的指令。例如,let x = 5; 是一个语句,它不返回值。函数定义本身也是语句。
  • 表达式(Expressions): 会计算并产生一个值。例如,5 + 6 是一个表达式,它计算并返回值 11。x + y、函数调用、宏调用也都是表达式。

函数体的最后一行若没有分号,则它是一个表达式,其值会成为函数的返回值。这被称为“隐式返回”。

fn add(x: i32, y: i32) -> i32 {
    x + y // 这是一个表达式,没有分号,它的值会被返回
}

fn main() {
    let result = add(3, 5);
    println!("3 + 5 = {}", result); // 输出: 3 + 5 = 8
}

你也可以使用 return 关键字进行显式返回,但 Rust 更推荐使用隐式返回,尤其是在函数末尾。

fn multiply(x: i32, y: i32) -> i32 {
    return x * y; // 显式返回
}

3.1.4 函数签名与可见性

函数的签名包括函数名、参数列表和返回类型。默认情况下,函数是私有的,仅在定义它的模块内部可见。如果你希望函数对其他模块公开,需要使用 pub 关键字。

// 私有函数,只能在当前模块内调用
fn private_helper() {
    println!("这是一个私有函数");
}

// 公有函数,可以被其他模块调用
pub fn public_function() {
    println!("这是一个公有函数");
    private_helper(); // 公有函数可以调用模块内的私有函数
}

3.1.5 一个完整的示例

下面是一个包含函数定义、调用、参数和返回值的完整示例:

// 定义一个函数,计算两个整数的和
fn sum(a: i32, b: i32) -> i32 {
    a + b // 隐式返回
}

// 定义一个函数,打印欢迎信息,无返回值
fn welcome(name: &str) {
    println!("欢迎你, {}!", name);
}

// 定义一个函数,判断一个数是否为偶数,返回布尔值
fn is_even(num: i32) -> bool {
    num % 2 == 0 // 隐式返回布尔表达式的结果
}

fn main() {
    // 调用 sum 函数
    let total = sum(10, 20);
    println!("总和是: {}", total); // 输出: 总和是: 30

    // 调用 welcome 函数
    welcome("张三"); // 输出: 欢迎你, 张三!

    // 调用 is_even 函数
    let number = 7;
    if is_even(number) {
        println!("{} 是偶数", number);
    } else {
        println!("{} 是奇数", number); // 输出: 7 是奇数
    }
}

3.1.6 小结

  • 使用 fn 关键字定义函数。
  • 函数名采用蛇形命名法(snake_case)。
  • 函数体由语句和表达式组成,最后一个表达式(不带分号)的值即为函数的返回值。
  • 使用 -> 指定返回类型。
  • 使用 pub 关键字控制函数的可见性。
  • 函数调用只需使用函数名加括号即可。

理解函数的基本定义和调用是掌握 Rust 编程的第一步,它为后续学习更复杂的函数特性(如参数传递、所有权、泛型等)奠定了基础。

Last Updated:: 5/9/26, 3:13 PM