核心语法对比
我们可以通过比较的方式来理解 Rust 的语法
变量与可变性
在 TypeScript 中,变量默认是可变的(用 let 定义),而常量使用 const 定义。而在 Rust 中,变量默认是不可变的,如果需要修改变量的值,需要显式声明其为可变的。
TypeScript:
let x = 10;
x = 20; // 可以修改
const y = 10;
// y = 20; // 错误,const 不能被修改
Rust:
let x = 10;
// x = 20; // 错误,默认不可变
let mut y = 10; // 使用 mut 声明为可变
y = 20; // 可以修改
Rust 强制不可变的默认行为帮助你避免意外修改数据,从而减少错误,尤其在并发编程时更为安全。
数据类型
Rust 是静态类型语言,但与 TypeScript 类似,你不需要显式标注类型,编译器会推导。你也可以手动指定类型。
TypeScript:
let x: number = 10;
let y = "hello"; // 类型推导为 string
Rust:
let x: i32 = 10; // 显式指定类型为 32 位整数
let y = "hello"; // 类型推导为 &str(字符串切片)
函数
Rust 和 TypeScript 都支持定义函数。Rust 中函数的返回值类型和参数类型必须明确声明。
TypeScript:
function add(a: number, b: number): number {
return a + b;
}
Rust:
fn add(a: i32, b: i32) -> i32 {
a + b // Rust 函数最后一行没有分号表示返回值
}
简单数据类型参考
| 数据类型 | 描述 | 示例 | 大小 |
|---|---|---|---|
| 整数类型 | 用于存储整数值,包括有符号和无符号整数。 | let a: i32 = 10; | i8, i16, i32, i64, i128, isize u8, u16, u32, u64, u128, usize |
| 浮点数类型 | 用于存储带小数点的数字。 | let b: f64 = 3.14; | f32, f64 |
| 布尔类型 | 仅有两个值:true 或 false。 | let c: bool = true; | 1 byte |
| 字符类型 | 表示单个 Unicode 字符。 | let d: char = 'a'; | 4 bytes |
| 字符串类型 | 存储 UTF-8 编码的文本数据,可以是不可变的引用(&str)或可变的字符串(String)。 | let e: &str = "Hello"; let f: String = String::from("World"); | |
| 元组 | 组合多个不同类型的值,固定长度。 | let tup: (i32, f64, &str) = (500, 6.4, "hello"); | 取决于其中的类型 |
| 数组 | 固定长度的同一类型的元素集合。 | let arr: [i32; 5] = [1, 2, 3, 4, 5]; | 取决于元素类型和数组长度 |
| 切片 | 引用数组的部分数据,用于动态大小的集合。 | let slice: &[i32] = &arr[1..4]; | |
| 枚举 | 定义多个相关值,可以携带数据。 | enum Color { Red, Green, Blue } | 取决于变体 |
| 结构体 | 组合多个相关数据项,允许自定义数据类型。 | struct Point { x: i32, y: i32 } | 取决于字段 |
数据类型说明
-
整数类型:
-
有符号整数:包括
i8,i16,i32,i64,i128,isize,可以表示正负数。 -
无符号整数:包括
u8,u16,u32,u64,u128,usize,只能表示非负数。
在 32 位 系统上,
isize的大小为 4 字节(32 位)。在 64 位 系统上,
isize的大小为 8 字节(64 位)。 -
-
浮点数类型:
f32和f64表示单精度和双精度浮点数,分别用于存储带小数点的值。
-
布尔类型:
- 仅有
true和false两个值,用于逻辑判断。
- 仅有
-
字符类型:
char类型用来表示单个字符,支持 Unicode。
-
字符串类型:
&str:不可变字符串切片,通常是对字符串字面量的引用。String:可变字符串,动态分配内存,适合需要修改的场景。
-
元组:
- 元组可以组合多种不同类型的数据,使用逗号分隔,长度固定。
-
数组:
- 数组中的元素类型相同,长度固定,存储在堆栈中。
-
切片:
- 动态大小的数组片段,引用原始数组的一部分。
-
枚举:
- 枚举允许定义多种相关类型的值,并可根据需要携带数据。
-
结构体:
- 允许创建自定义类型,通过字段组合不同类型的数据。
编写简单的 Rust 程序
我们先来编写一个简单的 Rust 程序,让你体验一下 Rust 的开发流程。
-
创建一个新项目:
cargo new hello_rust --bin cd hello_rust -
打开
src/main.rs,将其修改为以下内容:fn main() { let name = "修仙的人"; println!("Hello, {}! Welcome to Rust.", name); } -
运行项目:
cargo run