90% 的 Rust 新手都不知道的 3 个实用开发技巧

90% 的 Rust 新手都不知道的 3 个实用开发技巧

今天分享 3 个 90% 的 Rust 新手都不知道,但一旦用上就再也离不开的实用开发技巧,帮助你在学习 Rust 的道路上少走弯路。

dbg! 比 println! 更适合调试

很多新手开发者倾向于使用 println! 宏进行调试,但其实 Rust 提供了专门用于快速调试的输出宏 dbg!

rust 复制代码
fn main() {
    let x = 42;
    let y = 10;

    println!("x = {}", x);
    dbg!(x, y);
    dbg!(x + y * 2);
}

// Output:
// x = 42
// [src/main.rs:6:5] x = 42
// [src/main.rs:6:5] y = 10
// [src/main.rs:7:5] x + y * 2 = 62

从上面的示例可以看到,使用 println! 宏调试的时候需要手动写格式化字符串,而使用 dbg! 宏,则会自动打印表达式和值,还带文件名和行号。

除此之外,dbg! 宏还会返回传入表达式的值,这使得它可以无缝插入到现有代码中,不影响程序逻辑。

rust 复制代码
fn main() {
    let x = 10;
    let y = 20;

    let sum = dbg!(x) + dbg!(y);
    dbg!(sum);

    let sum = dbg!(calculate(x, y));
    dbg!(sum);
}

fn calculate(a: i32, b: i32) -> i32 {
    a + b
}

// Output:
// [src/main.rs:5:15] x = 10
// [src/main.rs:5:25] y = 20
// [src/main.rs:6:5] sum = 30
// [src/main.rs:8:15] calculate(x, y) = 30
// [src/main.rs:9:5] sum = 30

dbg! 宏不止可以直接嵌入表达式中,还可以嵌入函数调用当中,而这些是 println! 宏完全做不到的。非常的好用,反正我现在调试基本就是用 dbg! 宏了。

使用 todo! 宏占位

todo! 绝对是 Rust 标准库中最被低估且最实用的宏之一。在项目开发的早期时,让我们能专注于思考核心逻辑,而不被细节实现以及编辑器的报错打断。

rust 复制代码
fn calculate_tax(income: f64) -> f64 {
    todo!()
}

fn main() {
    let tax = calculate_tax(10000.0);
    dbg!(tax);
}

在上面的示例中,我们使用 todo! 宏进行占位,但是暂不实现的函数细节。

todo! 本质上是一个会触发 panic 的宏,所以当执行到它的时候就会抛出 panic。不过,todo! 宏有其明确的语义:这段代码尚未实现,后续需要补充

在实际使用时,我强烈建议携带上下文信息,如下所示:

rust 复制代码
fn calculate_tax(income: f64) -> f64 {
    todo!("执行步骤一 -> 步骤二 -> 步骤三")
}

同时它也支持式化字符串:

rust 复制代码
fn calculate_tax(income: f64) -> f64 {
    todo!("收入为:{},执行步骤一 -> 步骤二 -> 步骤三", income)
}

如果你使用的是 VSCode 编辑器,我强烈建议你装上 Todo Tree,这个插件可以检索到代码中的 todo! 宏,不过需要在其正则匹配的规则中添加上相应内容:

json 复制代码
{
  "todo-tree.regex.regex": "(//|#|<!--|;|/\\*|^|^[ \\t]*(-|\\d+.))\\s*($TAGS)|todo!",
}

实际效果如下所示:

使用 bacon 进行热更新

为了避免每次修改代码之后,都需要重新手动编译一次。在实际开发过程中,热更新方案是不可或缺的,而 Rust 生态中最常用的热更新方案是 bacon

shell 复制代码
cargo install --locked bacon

安装完成后,我们需要到项目根目录中初始化 bacon 配置文件。

shell 复制代码
bacon --init

它会自动生成 bacon.toml 配置文件,我们需要在配置文件中配置任务。这次的示例中,我们会用到它默认提供的任务 run

首先,执行 bacon 命令启动服务。

接下来,键入 Ctrl-j 打开任务列表,我们切换到 run 任务。

当在终端中看到相关的打印时,意味着我们切换到 run 任务了。

之后,我们每次修改代码并保存,bacon 都会监听并重新执行任务。

结语

以上就是今天分享的 3 个 Rust 实用技巧,这些技巧看似简单,但却能在日常开发中节省大量时间和精力。希望这篇文章能对你有所帮助,也祝愿每一位 Rust 新手在学习的道路上越走越顺。

相关推荐
Huyuejia1 小时前
runtime-ask
后端
ZengLiangYi1 小时前
sql.js WASM 深度解析
javascript·数据库·后端
Stick_ZYZ1 小时前
从“能调用工具”到“能稳定执行任务”:Agent 工程化的下一步
java·人工智能·后端·spring·ai
千云2 小时前
使用Dubbo延迟暴露解决启动接口超时,开发人员再也不用熬夜了!
后端
JustHappy2 小时前
古法编程秘籍(三):为什么需要函数?因为程序员讨厌重复劳动
前端·javascript·后端
用户2181697049302 小时前
Gin (六) mysql的操作 gin操作mysql
后端
AI打工人2 小时前
Python并发编程:多线程与多进程实战指南
后端
Jiude2 小时前
AI面对真机调试也束手无策?我将方法论形成了一套SKILL 🛠️🤖
前端·后端·测试
千云2 小时前
AI Coding 落地探索日志·实践篇·提效操作指南
后端