Rust一些最佳实践

💡 原文中文,约1100字,阅读约需3分钟。
📝

内容提要

使用expect而不是unwrap,使用标准特征,保持快速构建时间,使用flatten()和match/if let,使用matches!()宏,将重复的代码做成宏,使用宏处理未指定数量的参数,泛型和Trait对象的优缺点,使用工具如cargo expand、cargo fmt、cargo clippy、dbg!、cargo check,避免使用unwraps、if-let、let-else、不必要的克隆,使用工具如clippy、fmt,倾向于非pub成员和非pub函数和模块,研究生命周期,使用值来消耗前一个实例,只要是只读参数就使用ref,检查是否真的需要单元格/rc/Arc,学习async,不信任实验性来源的crate,学会写宏,但不滥用,使用工具如map、and_then、collect,实现/删除标准特性。

🎯

关键要点

  • 切勿使用 unwrap,而应使用 expect。

  • 利用 From、TryFrom 等标准特征。

  • 经常运行 'cargo c',保持快速的构建时间,先编写可工作的代码,再测试和重构。

  • 使用 'flatten()' 处理内部选项/结果,随后使用 match/if let。

  • 对于单个匹配,使用 'matches!()' 宏。

  • 将重复的代码做成宏。

  • 需要未指定数量的参数时,使用宏。

  • 泛型使编译时间变慢,Trait 对象使编译时间更快但运行时间变慢。

  • 使用 cargo expand 查看宏扩展。

  • 将项目拆分为多个库和一个二进制文件以加快编译时间。

  • 使用工具如 cargo fmt、cargo clippy、dbg!、cargo check。

  • 教导如何处理错误,避免使用 unwraps、if-let、let-else 和不必要的克隆。

  • 倾向于使用非pub成员和函数,保持抽象性。

  • 研究生命周期,避免不必要的克隆。

  • 使用值来消耗前一个实例,只要是只读参数就使用 ref。

  • 检查是否真的需要单元格/rc/Arc。

  • 学习 async,以节省手动管理状态机的时间。

  • 不信任实验性来源的 crate,避免从未维护的库中迁移代码。

  • 学会写宏,但不要滥用。

  • 使用工具如 map、and_then、collect,保持内部隐私,实施标准特性。

➡️

继续阅读