🦀 Rust 入门教程(二):基础语法与数据类型详解

在上一篇文章中,我们完成了 Rust 的安装和第一个 “Hello, world” 项目。这篇文章将继续深入,带你了解 Rust 的基础语法和常用数据类型,这部分是写好任何一个 Rust 程序的基石。


🔧 1. 变量与可变性(mut)

Rust 默认所有变量都是不可变的(immutable)。这与很多语言(如 Python、JavaScript)不同,它的初衷是为了提升代码的安全性和可预测性

不可变变量示例

fn main() {let x = 5;println!("x 的值是: {}", x);// x = 6; // ❌ 编译错误:cannot assign twice to immutable variable
}

可变变量(使用 mut

如果你确实需要修改变量,可以用 mut

fn main() {let mut y = 10;println!("y 初始值: {}", y);y = 20;println!("y 修改后: {}", y);
}

📊 2. 基本数据类型

Rust 是一门静态强类型语言,编译器会在编译阶段就进行类型检查。你可以显式声明类型,也可以依靠类型推导(type inference)。

整数类型(默认 i32

let a: i32 = 100;
let b: u8 = 255;

类型

大小

是否有符号

i8

8位

有符号

u8

8位

无符号

i32

32位

有符号

u64

64位

无符号

isize

平台相关

有符号

usize

平台相关

无符号

浮点类型(f32 / f64

let pi: f64 = 3.1415;
let e = 2.71828; // 默认是 f64

布尔类型(bool

let is_active: bool = true;

字符类型(char

let letter = 'A';
let emoji = '🦀'; // Rust 的 char 是 4 字节,支持 Unicode!

🧱 3. 元组(Tuple)

元组可以包含不同类型的多个值。

fn main() {let person: (&str, i32, bool) = ("Alice", 30, true);println!("姓名: {}, 年龄: {}, 是否活跃: {}", person.0, person.1, person.2);
}

解构元组

let (name, age, active) = person;

📦 4. 数组(Array)

数组是固定长度的同类型元素集合。

fn main() {let numbers = [1, 2, 3, 4, 5];println!("第一个元素是: {}", numbers[0]);
}

显式声明类型和长度

let arr: [i32; 3] = [10, 20, 30];

初始化相同元素

let zeros = [0; 5]; // [0, 0, 0, 0, 0]

❗ 注意:访问越界数组元素会触发运行时 panic


🔒 5. 常量(const)与变量遮蔽(shadowing)

const 常量

常量在声明时必须指定类型,并且必须是编译期可求值的表达式:

const MAX_USERS: u32 = 1000;

let 的区别:

特性

const

let

是否可变

❌ 不可变

✅ 默认不可变

是否编译期求值

✅ 必须

❌ 可以运行期计算

作用域

全局或局部

局部块内


变量遮蔽(Shadowing)

Rust 允许用相同变量名重新声明变量,这称为变量遮蔽

fn main() {let x = 5;let x = x + 1; // 重新声明并赋值{let x = x * 2; // 在新作用域中再次遮蔽println!("作用域内 x: {}", x); // 12}println!("作用域外 x: {}", x); // 6
}

变量遮蔽的好处:

  • 可改变变量类型
  • 可避免 mut 带来的副作用

📌 总结

今天我们学习了 Rust 最基础也最重要的语法和数据类型:

✅ Rust 默认变量不可变,推荐优先使用不可变变量
✅ 类型系统严谨,但也支持类型推导
✅ 元组和数组是常用的集合类型
✅ 常量用 const,变量可以通过 Shadowing 重新声明