跟着谷歌安卓团队学Rust - 标准库与文档帮助你快速成长的伙伴

47 阅读5分钟

大家好,我是梦兽编程。欢迎回来与梦兽编程一起刷Rust的系列。

这是由 Google 的 Android开发团队的分享Rust课程。本课程涵盖了 Rust 的方方面面,从基本语法到泛型和错误处理等高级主题。

该课程的最新版本可以在 google.github.io/comprehensi…

如果你喜欢看梦兽编程的版本可以订阅跟着谷歌安卓团队学Rust订阅最新内容,梦兽编程也期待大家关注我的个人网站。

加入梦兽编程微信群,公众号回复111即可加入交流群与梦兽进行交流。

标准库

在 Rust 中,标准库可以帮助建立一套由 Rust 库和程序使用的常见类型。这样,两个库可以顺利地一起工作,因为它们都使用相同的类型。实际上,Rust 包含标准库的数层:std 是 Main 模块的别名,用来作为应用通常使用库的一部分。alloc 是内存管理和指针分配相关的模块,为 Rust 的内存安全提供分配策略。core 是 Rust 语言的核心模块,包括语言的基本抽象,如借用和所有权的等。

Rust 的标准库提供了许多功能,可以极大地简化常见的编程任务。在这些标准库中,我们常用的标准库有:

  1. 键值对容器:HashMap 和 bimap:这些容器可以用于存储键值对,并提供了丰富的查询和更新操作。
  2. 字符串和字符 std::str 这是Rust中处理字符串最佳的方式,它提供了许多遍历的函数,例如查找子字符串、拆分、链接等。
  3. 字符串搜索和替换:std::search 和 std::replace:这些函数可用于在字符串中搜索子字符串并进行替换。
  4. 数组和向量:std::array 和 std::vector:这些容器用于存储和访问固定大小的数据结构,例如整数数组和向量。
  5. 线程:std::thread:可以使用 Rust 中的线程来实现并发代码,使其更加高效和可靠。
  6. 错误处理:std::error:std::error 引擎提供了可重入的错误处理,可以帮助程序员快速侦测并转错错误。

挠了很多神神叨叨的点,实际上 rust 标准库的用途主要是减少出错的几率,和效率。在写代码的过程中,经常会出现各种错误,rust 标准库提供了一些视觉化的工具来帮助你快速定位问题所在。同时 rust 的编译器会尽可能优化代码,避免死锁和竞态条件的发生。如果你使用了 rust 的标准库,实际代码执行效率也会比你想象的高得多。

文档

Rust是一门现代编程语言,在我们日常开发过程中。开发文档是一项非常重要的内容。几乎所有的标准库都拥有注释的功能,比如OptionBinaryHeap。Rust提供使用常用的注释进行给Rust Doc生成文本。

在Rust中注释的种类可以分为三类:

  • 代码注释,用于说明某一块代码的功能,读者往往是同一个项目的协作开发者
  • 文档注释,支持 Markdown,对项目描述、公共 API 等用户关心的功能进行介绍,同时还能提供示例代码,目标读者往往是想要了解你项目的人
  • 包和模块注释,严格来说这也是文档注释中的一种,它主要用于说明当前包和模块的功能,方便用户迅速了解一个项目

通过这些注释,实现了 Rust 极其优秀的文档化支持,甚至你还能在文档注释中写测试用例,省去了单独写测试用例的环节,我直呼好家伙!

代码注释

代码注释是不会通过cargo doc生成文档应用。它和我们常用的语言一样可以分类两类

行注释 //

fn is_divisible_by(lhs: u32, rhs: u32-> bool {
    // if rhs == 0 ?
    if rhs == 0 {
        return false;
    }
    lhs % rhs == 0
}

块注释/* ..... */

fn main() { /* 我 是 S u n ... 哎,好长! */ let name = "sunface"; let age = "???"; // 今年其实。。。挺大了 }

文档注释

这种注释可以通过cargo doc 的命令,可以用于把这些文档注释转换成 HTML 网页文件,最终展示给用户浏览,这样用户就知道这个包是做什么的以及该如何使用。

/// Determine whether the first argument is divisible by the second argument.
///
/// If the second argument is zero, the result is false.
fn is_divisible_by(lhs: u32, rhs: u32-> bool {
    if rhs == 0 {
        return false;
    }
    lhs % rhs == 0
}

但是需要注意的是:

  • 文档注释需要位于 lib 类型的包中,例如 src/lib.rs 中
  • 文档注释可以使用 markdown语法!例如 # Examples 的标题,以及代码块高亮
  • 被注释的对象需要使用 pub 对外可见,记住:文档注释是给用户看的,内部实现细节不应该被暴露出去

当然你也可以使用类似其他语言一样对文档块进行编码。

/** `add_two` 将指定值加2

let arg = 5; let answer = my_crate::add_two(arg);

assert_eq!(7, answer);

*/
pub fn add_two(x: i32) -> i32 {
    x + 2
}

当我们需要查阅应用代码块拥有那些api与内容时cargo doc --open,系统就会在浏览器打开一个文档HTML地址。

参考资料

[1]

google.github.io/comprehensi…: google.github.io/comprehensi…

本文使用 markdown.com.cn 排版