以下是 Rust 语言基础语法的核心要点,结合与 JavaScript 的对比,帮助前端开发者快速掌握核心概念:
mut
显式声明可变性。let x = 5; // 不可变变量
let mut y = 10; // 可变变量
y += 1; // 允许修改
const x = 5; // 不可变常量
let y = 10; // 可变变量
const MAX_POINTS: u32 = 100_000; // 使用下划线提高可读性
const MAX_POINTS = 100000;
类型 | Rust 示例 | JavaScript 对比 |
---|---|---|
整数 | i32 , u64 |
number (统一类型) |
浮点数 | f64 |
number |
布尔 | bool |
boolean |
字符 | char (如 'A' ,4字节) |
string (如 'A' ) |
元组(Tuple)
let tup: (i32, f64, &str) = (500, 6.4, "hello");
let (x, y, z) = tup; // 解构
println!("{}", tup.0); // 访问元素:500
JavaScript 对比:无直接等价,近似数组解构:
const tup = [500, 6.4, "hello"];
const [x, y, z] = tup;
数组(Array)
let arr = [1, 2, 3]; // 类型推断为 [i32; 3]
let arr2: [i32; 5] = [0; 5]; // 初始化为 [0, 0, 0, 0, 0]
println!("{}", arr[0]); // 访问元素:1
JavaScript 对比:
const arr = [1, 2, 3];
String
:堆分配,可变字符串。let mut s = String::from("hello");
s.push_str(", world!"); // 修改字符串
&str
:字符串切片(不可变引用),通常用于函数参数。let s = "hello"; // 类型为 &str
String
),无栈上切片概念。// 函数定义(带返回值类型标注)
fn add(x: i32, y: i32) -> i32 {
x + y // 无分号,隐式返回
}
// 调用函数
let result = add(5, 3);
function add(x, y) {
return x + y;
}
const result = add(5, 3);
{}
)是表达式,可返回值:let y = {
let x = 3;
x + 1 // 无分号,返回 4
};
let num = 6;
if num % 2 == 0 {
println!("偶数");
} else {
println!("奇数");
}
// if 是表达式,可赋值
let result = if num > 5 { "大" } else { "小" };
loop
:无限循环loop {
println!("无限循环");
break; // 手动退出
}
while
let mut count = 0;
while count < 5 {
println!("count = {}", count);
count += 1;
}
for
let arr = [10, 20, 30];
for element in arr.iter() {
println!("值: {}", element);
}
for...of
类似 Rust 的 for
遍历迭代器:const arr = [10, 20, 30];
for (const element of arr) {
console.log(`值: ${element}`);
}
// 定义结构体
struct User {
username: String,
email: String,
sign_in_count: u64,
}
// 创建实例
let user1 = User {
email: String::from("[email protected]"),
username: String::from("user1"),
sign_in_count: 1,
};
// 修改可变实例
let mut user2 = User { /* ... */ };
user2.email = String::from("[email protected]");
const user1 = {
email: "[email protected]",
username: "user1",
sign_in_count: 1
};
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
match
)let msg = Message::Write(String::from("hello"));
match msg {
Message::Quit => println!("退出"),
Message::Move { x, y } => println!("移动到 ({}, {})", x, y),
Message::Write(text) => println!("消息: {}", text),
Message::ChangeColor(r, g, b) => println!("颜色: RGB({}, {}, {})", r, g, b),
}
const Message = {
Quit: Symbol("Quit"),
Move: (x, y) => ({ type: "Move", x, y }),
Write: (text) => ({ type: "Write", text }),
};
Result
类型fn read_file(path: &str) -> Result<String, std::io::Error> {
std::fs::read_to_string(path)
}
// 使用 match 处理
match read_file("hello.txt") {
Ok(content) => println!("内容: {}", content),
Err(e) => println!("错误: {}", e),
}
// 使用 ? 运算符简化(需在返回 Result 的函数内)
fn process_file() -> Result<(), std::io::Error> {
let content = read_file("hello.txt")?;
println!("内容: {}", content);
Ok(())
}
try/catch
:try {
const content = fs.readFileSync("hello.txt", "utf8");
console.log(`内容: ${content}`);
} catch (e) {
console.error(`错误: ${e}`);
}
let s1 = String::from("hello");
let len = calculate_length(&s1); // 不可变借用
fn calculate_length(s: &String) -> usize {
s.len()
}
通过掌握这些基础语法,前端开发者可逐步适应 Rust 的静态类型系统和内存安全模型,为进一步学习高级特性(如异步编程、生命周期)打下坚实基础。