大家好,我是梦兽编程。欢迎回来与梦兽编程一起刷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, usize | 0, 123, 10_u16 |
浮点类型 | f32, f64 | 3.14, -10.0e20, 2_f32 |
Strings | &str | "foo", "two\nlines" |
Unicode | char | 'a', 'α','∞' |
布尔类型 | bool | true,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
- 梦兽编程倔强号
- 梦兽编程知乎
- 梦兽编程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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。