【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分于上海。

相关推荐
-今昭-13 分钟前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
乐迪信息22 分钟前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
黑马程序员毕设2 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳2 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
心抵鹊2 小时前
归并排序之翻转对(hard)
数据结构·算法
白山编程大哥3 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
_Twink1e3 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
shehuiyuelaiyuehao3 小时前
算法34,位运算符操作,总结
算法
问天_观心3 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长3 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管