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

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

该课程的最新版本可以在 https://google.github.io/comprehensive-rust/找到。如果您正在其他地方阅读,请检查那里的更新。

看到很多小伙伴会推荐字节的分享,但是字节的分享有点偏向视频太长了不太时候,梦兽感觉谷歌的内容简单易懂。

基本语法

Rust中有很多语法和其他语言类似,在C、C++、Java中熟悉大部分的语法。

Rust不想Python这类语法,它保留了块和范围由花括号分隔的功能。

fn main() {
    // a
    {
        //b
        {
           /*c*/
        }
    }
}

像上面的代码,我们每个方法都有一个作用域,里面加了一对{}就可以形成作用域b以此类推。
比如:行注释以 开头//,块注释以 分隔/ ... /。或者我们熟悉的if还有while也是类似的。一些赋值方式也是和c++、c、java一样。let a = 0。进行比较if a == b等都大同小异。

Rust中的基础数据类型

类型文字
带符号的整数i8, i16, i32, i64, i128, isize-10, 0, 1_000, 123_i64
不带符号的整数 (>0的数字)u8, u16, u32, u64, u128, usize0, 123, 10_u16
浮点类型f32, f643.14, -10.0e20, 2_f32
Strings&str"foo", "two\nlines"
Unicodechar'a', 'α','∞'
布尔类型booltrue,false

上面里面有几点我们需要了解到就

iN,uN和fN 中的N代表的是几位的意思

i8 是 8 位有符号整数,u16 是 16 位无符号整数,f32 是 32 位浮点数。

isize 和 usize 类型的宽度是指针的宽度。

指针是指向内存地址的引用。指针的宽度取决于系统的架构。在 64 位系统上,isize 和 usize 都是 64 位宽。在 32 位系统上,isize 和 usize 都是 32 位宽。

char 类型的宽度是 32 位。

char 类型用来表示 Unicode 字符。Unicode 字符可以是 1 到 4 个字节宽。在 Rust 中,char 类型的宽度总是 32 位,以便可以表示所有 Unicode 字符。

bool 类型的宽度是 8 位。

bool 类型用来表示布尔值,即 true 或 false。在 Rust 中,bool 类型的宽度是 8 位。

fn main() {
    let i8 = 127; // 8 位有符号整数
    let u16 = 65535; // 16 位无符号整数
    let f32 = 3.14159; // 32 位浮点数
    let isize = 1024; // 64 位指针
    let usize = 1024; // 64 位指针
    let char = 'a'; // 32 位 Unicode 字符
    let bool = true; // 8 位布尔值
}

在这种情况下,i8 占用 1 个字节,u16 占用 2 个字节,f32 占用 4 个字节,isize 和 usize 占用 8 个字节,char 占用 4 个字节,bool 占用 1 个字节。

希望这能帮助你理解 Rust 中的类型宽度。

复合类型

什么是复合类型?通常来说以下都属于一个复合类型,有多个基础类型组合成的数据类型例如:

  • 结构体:一个结构体可以包含多个成员,每个成员可以是原始类型或另一个复合类型。
  • 数组:一个数组可以包含多个相同类型的元素。
  • 指针:一个指针可以指向另一个数据类型的变量。
类型文字
Arrays[T; N][20, 30, 40], [0; 3]
Tuples(), (T,), (T1, T2), …(), ('x',), ('x', 1.2), …

数组

数组类型 [T; N] 表示 N 个(编译时常量)相同类型 T 的元素。请注意,数组的长度是其类型的一部分,这意味着 [u8; 3] 和 [u8; 4] 被视为两种不同的类型。

我们可以使用字面量为数组赋值。例如:

let a = [1, 2, 3, 4, 5];

在 main 函数中,print 语句使用 ? 格式参数请求调试实现:{} 提供默认输出,{:?} 提供调试输出。我们也可以使用 {a} 和 {a:?} 而无需在格式字符串后面指定值。

梦兽编程推荐:{:?}对复合类型进行打印

print!("{:?}",a)

元组

与数组一样,元组也有固定的长度。
元组将不同类型的值组合成一个复合类型。例如:

let t = (1, "hello", true);

元组的字段可以通过句点和值的下标访问,例如 t.0、t.1。

空元组 () 也称为“unit type”。它既是一种类型,又是该类型的唯一有效值——也就是说,类型和值都表示为 ()。它用于表示函数或表达式没有返回值,例如:

fn f() -> () {
    // ...
}

可以将其视为其他编程语言中熟悉的 void。

元组和数组的区别

元组

元组是固定长度的,不能动态扩展或缩减。
元组可以包含不同类型的值。
元组的元素可以通过句点和元素的下标访问。
空元组也称为“unit type”,它既是一种类型,又是该类型的唯一有效值。

数组

数组可以是固定长度的,也可以是可变长度的。
数组中的所有元素必须是相同类型的。
数组的元素可以通过索引访问。


好了以上就是本次的所有内容,这里是梦兽编程-本次系列是根本《谷歌安卓团队学习Rust》。

https://rexweb.link/category/technical-column/learn-rust-from-the-android-team或者更多技术可以收藏梦兽编程https://rexweb.link

  1. 梦兽编程倔强号
  2. 梦兽编程知乎
  3. 梦兽编程bilibili

微信搜索梦兽编程公众号

梦兽编程倔强号

https://juejin.cn/user/2066737588876983

梦兽编程知乎

https://www.zhihu.com/people/mo-dong-74

梦兽编程bilibili

https://space.bilibili.com/106325238?spm_id_from=333.1007.0.0


梦兽编程
1 声望0 粉丝