Rust 笔记 - 通用编程概念

《Rust编程语言》笔记之一

关于cargo

  • cargo run
  • cargo build
  • cargo check
  • cargo new {project name}
  • cargo doc --open: 构建本地及其依赖的文档

通用编程概念

如果需要使用关键字作为变量名称,在变量前加r#,比如r#match

变量与可变性

变量默认是不变的,可以使用mut关键字声明可变的变量:

1
let mut x = 10;

使用const声明常量,常量有几个特征:

  1. 不能使用mut关键字
  2. 必须声明类型
  3. 习惯用大写字母加下划线命名

可以使用let关键字对一个变量多次声明,这样后面声明的变量会将第一个声明的变量隐藏,这种行为叫做隐藏(shadowing):

1
2
3
let x = 10;
let x = 20;
let x = "zhang"

数据类型

标量类型

整型
长度 有符号 无符号
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
arch isize usize

arch依赖计算机的架构,如果是 64 位的架构上,是 64 位,如果是 32 架构,是 32 位。

浮点数

有两种类型: f32,f64

复合类型

Rust中有两种复合类型: 元组(tuple)数组(array)

元组

元组是一个将多个类型的值组合进一个复合类型的主要方式。

  • 元组中的数据类型不必相同
  • 元组可以使用解构(destructing)对元组赋值
  • 使用点号(.)和下标识访问元组成员
1
2
3
4
5
fn main() {
let tup: (i32, f32, i8) = (32, 12.3, 8);
let (foo, bar, zoo) = tup;
println!("foo: {}, bar: {}, zoo: {}", foo, bar, zoo)
}
数组
  • 数组是定长的,声明后不能再改变数组的长度
  • 数组中的元素的数据类型必须相同
  • 如果越界访问数组,编译会报错
1
let arr: [i32, 5] = [1, 2, 3, 4, 5];

函数

rust中,使用snake case规范风格: 小写字母加下划线。

1
2
3
fn say_something() {
// expressions
}

Rust 是一门基于表达式(expression-based)的语言。 // 注: 不理解

在 Rust 中,语句不返回值,因此不能把let语句复制给另外一个变量,如:

1
let x = (let y = 10); // 报错: error: expected expression, found statement (`let`)
  • 函数调用是一个表达式,宏调用也是,{}(代码块)也是
  • 如果表达式后加分号,则是一个语句,如果不加,就是一个表达式,表达式是有返回值的
  • 函数签名中必须声明每个变量的类型
  • ()用来声明不返回值的函数

控制流

if

  • if中代码的条件必须是bool
  • if是一个表达式,所以可以在let语句的右侧使用if,但是,各个分支中的表达式的结果必须相同的数据类型

循环

Rust中有三种循环: loop, while, for

  • loop可以重复执行一段代码,直到遇到Ctrl + C或者break才会结束循环

小结

Rust中的控制流和其它语言中的比较类似,唯一比较特殊的是表达式的概念,比如,if是一个表达式语句,可以直接赋值给let,这一点挺有意思的。

练习代码