【Rust】06-函数、控制流与模块组织

函数、控制流与模块组织

学习目标

  • 掌握 Rust 函数定义和返回值写法。
  • 熟悉 ifloopwhilefor
  • 理解模块、可见性和文件组织的基本规则。

函数

Rust 函数使用 fn 定义,参数必须标注类型:

rust 复制代码
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(2, 3);
    println!("{result}");
}

函数返回值类型写在 -> 后。函数体最后一个表达式如果没有分号,就作为返回值。

也可以显式使用 return

rust 复制代码
fn abs(value: i32) -> i32 {
    if value < 0 {
        return -value;
    }

    value
}

Rust 风格通常偏向使用尾表达式,遇到提前返回时再用 return

语句与表达式

Rust 区分语句和表达式:

  • 语句执行动作,不返回可用值。
  • 表达式计算并产生值。
rust 复制代码
fn main() {
    let x = {
        let y = 3;
        y + 1
    };

    println!("{x}");
}

代码块 { ... } 是表达式,最后的 y + 1 没有分号,所以整个代码块值为 4

if 表达式

if 可以作为表达式使用:

rust 复制代码
fn main() {
    let score = 85;
    let level = if score >= 60 { "pass" } else { "fail" };

    println!("{level}");
}

所有分支必须返回同一类型:

rust 复制代码
let value = if true { 1 } else { 0 };

loop

loop 表示无限循环,可以用 break 返回值:

rust 复制代码
fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("{result}");
}

while

while 适合条件循环:

rust 复制代码
fn main() {
    let mut n = 3;

    while n > 0 {
        println!("{n}");
        n -= 1;
    }
}

for

遍历集合时优先使用 for

rust 复制代码
fn main() {
    let numbers = [10, 20, 30];

    for number in numbers {
        println!("{number}");
    }
}

范围也可以遍历:

rust 复制代码
for n in 1..=5 {
    println!("{n}");
}

1..5 不包含 5,1..=5 包含 5。

模块基础

模块用于组织代码和控制可见性:

rust 复制代码
mod math {
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }
}

fn main() {
    let result = math::add(1, 2);
    println!("{result}");
}

默认情况下,模块中的项是私有的。需要对外使用时加 pub

文件组织

当项目变大时,可以把模块拆到文件中:

text 复制代码
src/
├── main.rs
└── math.rs

src/main.rs

rust 复制代码
mod math;

fn main() {
    println!("{}", math::add(1, 2));
}

src/math.rs

rust 复制代码
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

mod math; 告诉编译器加载同级的 math.rs 文件。

use

use 可以把路径引入当前作用域:

rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert("rust", 1);
}

不要为了省几个字符过度使用通配符导入。清晰的路径更利于阅读。

常见误区

  • 函数参数必须标注类型,局部变量通常可以让编译器推断。
  • 尾表达式不能带分号;带分号就变成语句。
  • if 分支类型必须一致。
  • 模块内的函数默认私有,需要 pub 才能被外部访问。

练习

  1. 写一个函数判断数字是否为偶数。
  2. for 打印 1 到 10 的平方。
  3. 创建一个 math 模块,提供 addmultiply 两个公开函数。

后记

2026年6月10日17点23分于上海。

相关推荐
阿正的梦工坊1 小时前
【Rust】16-async/await、Future 与执行器模型
网络·算法·rust
狗凯之家源码网1 小时前
永夜大圣 H5 棋牌大厅源码效果实测与品质解析
java·开发语言
爱装代码的小瓶子1 小时前
muduo库 --socket的封装
服务器·开发语言·php
凡人叶枫1 小时前
Effective C++ 条款13:以对象管理资源(RAII)
java·linux·开发语言·c++·嵌入式开发
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 36 - 39)
开发语言·人工智能·笔记·python
阿正的梦工坊1 小时前
【Rust】11-Rust 所有权模型的编译期推理机制
开发语言·算法·rust
zmzb01031 小时前
Python课后习题训练记录Day128
开发语言·python
callJJ1 小时前
Java 线程池使用指南:基于 Spring Boot 3.x + JDK 17 的入门与实践
java·开发语言·spring boot·线程池·多线程编程
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP多表连接视图实战:内连接/外连接配置逻辑与性能优化技巧
运维·开发语言·学习·性能优化·sap·abap