《深入Rust系统编程》2.1 变量与数据类型

2.1 变量与数据类型 在 Rust 中,变量是存储数据的容器,而数据类型则定义了变量可以存储的数据种类以及对这些数据可以进行的操作。理解变量和数据类型是学习 Rust 的基础,也是编写安全、高效 Rust 程序的关键。

2.1 变量与数据类型

在 Rust 中,变量是存储数据的容器,而数据类型则定义了变量可以存储的数据种类以及对这些数据可以进行的操作。理解变量和数据类型是学习 Rust 的基础,也是编写安全、高效 Rust 程序的关键。

2.1.1 变量声明与绑定

在 Rust 中,使用 let 关键字声明变量。变量声明的基本语法如下:

let variable_name: data_type = value;
  • variable_name 是变量的名称,遵循 Rust 的命名规范。
  • data_type 是变量的数据类型,可以是 Rust 内置的数据类型,也可以是用户自定义的类型。
  • value 是变量的初始值,必须与 data_type 兼容。

例如,以下代码声明了一个名为 x 的变量,并将其初始化为整数 5

let x: i32 = 5;

Rust 支持类型推断,可以根据变量的初始值自动推断其数据类型。因此,上面的代码可以简化为:

let x = 5;

Rust 中的变量默认是不可变的 (immutable),这意味着一旦变量被赋值,就不能再修改其值。如果需要声明可变变量,可以使用 mut 关键字:

let mut x = 5;
x = 10; // 合法,因为 x 是可变的

2.1.2 基本数据类型

Rust 提供了多种基本数据类型,可以分为以下几类:

1. 标量类型 (Scalar Types):

  • 整数类型 (Integer Types): 用于表示整数值,包括有符号整数 (i8, i16, i32, i64, i128, isize) 和无符号整数 (u8, u16, u32, u64, u128, usize)。数字后缀表示位数,例如 i32 表示 32 位有符号整数。
  • 浮点数类型 (Floating-Point Types): 用于表示浮点数值,包括 f32f64,分别表示 32 位和 64 位浮点数。
  • 布尔类型 (Boolean Type): 用于表示逻辑值,只有两个可能的值:truefalse
  • 字符类型 (Character Type): 用于表示单个 Unicode 字符,使用单引号 (') 括起来,例如 'a', '中', '😀'

2. 复合类型 (Compound Types):

  • 元组类型 (Tuple Types): 用于将多个不同类型的值组合成一个复合值。元组使用圆括号 (()) 括起来,元素之间用逗号 (,) 分隔,例如 (1, 3.14, 'a')
  • 数组类型 (Array Types): 用于存储固定数量的相同类型的元素。数组使用方括号 ([]) 括起来,元素之间用逗号 (,) 分隔,例如 [1, 2, 3, 4, 5]

2.1.3 类型转换

Rust 是强类型语言,不同类型之间的转换需要显式地进行。Rust 提供了多种类型转换的方式:

1. 使用 as 关键字进行类型转换:

let x = 5;
let y = x as f64; // 将整数 x 转换为浮点数 y

2. 使用 FromInto trait 进行类型转换:

let x = 5;
let y: f64 = x.into(); // 将整数 x 转换为浮点数 y

3. 使用 parse 方法将字符串转换为其他类型:

let s = "5";
let x: i32 = s.parse().unwrap(); // 将字符串 s 转换为整数 x

2.1.4 常量

常量是不可变的绑定,其值在编译时就已经确定。常量使用 const 关键字声明,并且必须显式地指定数据类型:

const PI: f64 = 3.14159;

2.1.5 变量作用域

变量的作用域是指变量在程序中有效的范围。Rust 使用块作用域 (block scope),变量从声明处开始到其所在块的结束处有效。

{
    let x = 5; // 变量 x 在此块内有效
    println!("x = {}", x);
} // 变量 x 在此处失效

2.1.6 变量遮蔽

Rust 允许在同一个作用域内声明同名变量,这称为变量遮蔽 (variable shadowing)。变量遮蔽不会影响原有变量的值,而是创建一个新的变量绑定。

let x = 5;
let x = x + 1; // 变量遮蔽
println!("x = {}", x); // 输出 x = 6

2.1.7 数据类型详解

1. 整数类型:

  • Rust 提供了多种整数类型,可以根据需要选择合适的类型来节省内存空间。
  • isizeusize 的大小取决于目标机器的指针大小,通常用于表示集合的大小或索引。

2. 浮点数类型:

  • Rust 提供了两种浮点数类型:f32f64,分别对应单精度和双精度浮点数。
  • 默认情况下,浮点数常量是 f64 类型。

3. 布尔类型:

  • 布尔类型只有两个值:truefalse,通常用于条件判断和逻辑运算。

4. 字符类型:

  • Rust 的字符类型是 Unicode 标量值,可以表示任何 Unicode 字符,包括 ASCII 字符、中文、日文、韩文等。
  • 字符类型使用单引号 (') 括起来,例如 'a', '中', '😀'

5. 元组类型:

  • 元组可以将多个不同类型的值组合成一个复合值。
  • 元组的元素可以通过模式匹配或索引访问。

6. 数组类型:

  • 数组用于存储固定数量的相同类型的元素。
  • 数组的长度是固定的,不能动态改变。
  • 数组的元素可以通过索引访问。

2.1.8 总结

变量和数据类型是 Rust 编程的基础。理解 Rust 的变量声明、数据类型、类型转换、常量、变量作用域和变量遮蔽等概念,对于编写安全、高效的 Rust 程序至关重要。Rust 提供了丰富的数据类型,可以满足各种编程需求。选择合适的类型可以提高代码的性能和可读性。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页