开始
Rust 是一种系统级编程语言,旨在提供内存安全、并发性和高性能。它通过严格的所有权模型来避免常见的内存错误,如空指针解引用和数据竞争,使得开发者能够编写安全可靠的代码
注释
//:单行注释/**/:块注释///:文档行注释,支持 markdown 和代码引用/** */:文档块注释,支持 markdown 和代码引用//!、/*! */:包、模块注释,必须放在包、模块的最上方
使用
cargo doc命令生成 HTML 文档
变量
变量使用 let 关键字声明,分为可变变量和不可变变量,常量使用 const 关键字声明
声明变量时,rust 支持自动推断变量类型
1 | let a = 10; // 可变变量 |
变量覆盖
在同一作用域内,使用 let 声明一个同名变量时,会覆盖之前的变量
在再次声明同名变量时,可以使用已存在的同名变量进行赋值
1 | let a: i32 = 10; |
数据类型
rust 的数据类型分为两类,分别是标量类型(基本数据类型)和复合类型(集合类型)
标量类型
rust 的标量类型包含整数、浮点数、字符和布尔值
整数
分为有符号数和无符号数,对于不同的长度有指定的类型
整数的默认类型为 i32
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8-bit | i8 |
u8 |
| 16-bit | i16 |
u16 |
| 32-bit | i32 |
u32 |
| 64-bit | i64 |
u64 |
| 128-bit | i128 |
u128 |
| 由架构决定 | isize |
usize |
浮点数
浮点数有 f32 和 f64,浮点数默认类型为 f64,所有浮点数都是有符号数
进制表示
| 数字字面值 | 例子 |
|---|---|
| Decimal (十进制) | 98_222 |
| Hex (十六进制) | 0xff |
| Octal (八进制) | 0o77 |
| Binary (二进制) | 0b1111_0000 |
Byte (单字节字符)(仅限于 u8) |
b'A' |
布尔值
布尔值有 true 和 false
字符
使用 '' 声明字符字面量,rust 的字符大小为 4 个字节,支持 Unicode 字符
复合类型
rust 中原生包含元组(tuple)和数组(array)两种复合类型
-
元组:长度固定,元素固定,可以包含多种不同类型的值
1
2
3
4
5
6
7
8
9
10// 元组的类型为(type1, type2, type3)
let x: (i32, f64, u8) = (500, 6.4, 1);
// 使用.访问元素
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
// 元组支持解构赋值
let (y1, y2, y3) = x;不含元素的元组的类型为
(),表示空值和空返回值,若表达式不返回任何值,默认返回() -
数组:长度固定,元素不固定,元素的类型必须相同
1
2
3
4
5
6// 数组的类型为[type; length]
let a: [i32; 5] = [1, 2, 3, 4, 5];
// 使用[]访问元素
let first = a[0];
let second = a[1];创建相同值的数组
1
let a: [i32; 5] = [3; 5] // 等价于let a = [3, 3, 3, 3, 3]
函数
使用 fn 关键字声明一个函数,必须声明参数列表类型和返回值类型
1 | fn add(a: i32, b: i32) -> i32 { |
语句和表达式
-
语句:执行一些操作并不返回值,需要以
;结尾1
let a = (let b = 10); // 语法错误,let是一个语句
-
表达式:执行操作并返回值
1
2
3
4
5// 一个代码块是一个表达式,可以赋值给a
let a = {
let b = 10;
b + 1
}
尾表达式
一个代码块的最后一行可以使用一个表达式作为返回值,在函数中可以省略 return,尾表达式不以 ; 结尾
1 | let a = { |
不会返回的函数
使用 ! 作为返回值,表示该函数永远不会返回,类似 Kotlin 中的 Nothing,通常用于错误处理
1 | fn dead_end() -> ! { |
控制流
rust 支持 if 条件判断以及 loop、while、for 三种循环
if 条件判断
if 后的条件不带括号,条件必须是 bool 值,整数不会进行隐式转换
1 | if condition { |
if 表达式
if 可以作为一个表达式赋值给变量,必须包含 else 分支,每个分支的表达式结果必须是相同类型
1 | let b = if a > 10 { 3 } else if a < 0 { 3 } else { 2 }; |
loop 循环
loop 循环是一个无限循环,等价于 while (1),可使用 break 和 continue 来控制循环
1 | loop { |
loop 表达式
loop 块可作为一个表达式,通过 break 来返回值
1 | let mut counter = 0; |
循环标签
在嵌套循环时,break 和 continue 默认控制最内层的循环,循环标签可用于控制外层循环
1 | fn main() { |
while 循环
与其他语言类似
1 | while condition { |
for 循环
rust 使用 for-in 循环
1 | let a = [10, 20, 30, 40, 50]; |
当需要数字序列时,可使用 Range 类型,使用 start..end 创建一个 Range 字面量,范围为左闭右开
1 | for number in 1..4 { |