我必须立刻押注 Rust 之一🎲:核心语法与数据类型

414 阅读4分钟

核心语法对比

我们可以通过比较的方式来理解 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
布尔类型仅有两个值:truefalselet 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 }取决于字段

数据类型说明

  1. 整数类型

    • 有符号整数:包括 i8, i16, i32, i64, i128, isize,可以表示正负数。

    • 无符号整数:包括 u8, u16, u32, u64, u128, usize,只能表示非负数。

    32 位 系统上,isize 的大小为 4 字节(32 位)。

    64 位 系统上,isize 的大小为 8 字节(64 位)。

  2. 浮点数类型

    • f32f64 表示单精度和双精度浮点数,分别用于存储带小数点的值。
  3. 布尔类型

    • 仅有 truefalse 两个值,用于逻辑判断。
  4. 字符类型

    • char 类型用来表示单个字符,支持 Unicode。
  5. 字符串类型

    • &str:不可变字符串切片,通常是对字符串字面量的引用。
    • String:可变字符串,动态分配内存,适合需要修改的场景。
  6. 元组

    • 元组可以组合多种不同类型的数据,使用逗号分隔,长度固定。
  7. 数组

    • 数组中的元素类型相同,长度固定,存储在堆栈中。
  8. 切片

    • 动态大小的数组片段,引用原始数组的一部分。
  9. 枚举

    • 枚举允许定义多种相关类型的值,并可根据需要携带数据。
  10. 结构体

    • 允许创建自定义类型,通过字段组合不同类型的数据。

编写简单的 Rust 程序

我们先来编写一个简单的 Rust 程序,让你体验一下 Rust 的开发流程。

  1. 创建一个新项目:

    cargo new hello_rust --bin
    cd hello_rust
    
  2. 打开 src/main.rs,将其修改为以下内容:

    fn main() {
        let name = "修仙的人";
        println!("Hello, {}! Welcome to Rust.", name);
    }
    
  3. 运行项目:

    cargo run