Rust 是一种系统编程语言,注重安全性、并发性和性能。以下是 Rust 的一些基本语法和概念:
1. 变量和可变性
Rust 中的变量默认是不可变的,可以使用 mut
关键字声明可变变量。
fn main() {
let x = 5; // 不可变变量
// x = 6; // 这行代码会导致编译错误
let mut y = 5; // 可变变量
y = 6; // 这行代码是合法的
}
2. 数据类型
Rust 是静态类型语言,常见的数据类型包括整数、浮点数、布尔值和字符。
fn main() {
let integer: i32 = 42;
let float: f64 = 3.14;
let boolean: bool = true;
let character: char = 'R';
}
3. 函数
函数是 Rust 的基本构建块,可以接受参数并返回值。
fn main() {
let result = add(5, 3);
println!("Result: {}", result);
}
fn add(a: i32, b: i32) -> i32 {
a + b
}
4. 控制流
Rust 支持常见的控制流结构,如 if
、loop
、while
和 for
。
fn main() {
let number = 7;
if number < 5 {
println!("Condition was true");
} else {
println!("Condition was false");
}
for i in 1..5 {
println!("i: {}", i);
}
}
5. 所有权和借用
Rust 的所有权系统是其内存安全性的核心。每个值都有一个所有者,值在离开作用域时会被释放。初学时,不必过于纠结,多用用再来理解!
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1 的所有权被移动到 s2
// println!("{}", s1); // 这行代码会导致编译错误,因为 s1 不再有效
let s3 = String::from("world");
let s4 = &s3; // s3 被借用
println!("{}", s3); // s3 仍然有效
println!("{}", s4);
}
6. 结构体
结构体用于创建自定义数据类型。
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
username: String::from("someone@example.com"),
email: String::from("someone@example.com"),
sign_in_count: 1,
active: true,
};
println!("Username: {}", user1.username);
}
7. 枚举
枚举用于定义一组可能的值。
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn main() {
let msg = Message::Write(String::from("Hello, world!"));
match msg {
Message::Quit => println!("Quit"),
Message::Move { x, y } => println!("Move to ({}, {})", x, y),
Message::Write(text) => println!("Write: {}", text),
Message::ChangeColor(r, g, b) => println!("Change color to ({}, {}, {})", r, g, b),
}
}
8. 模块和包
Rust 使用模块和包来组织代码。模块用于将代码分组,包用于分发代码。
mod my_module {
pub fn my_function() {
println!("Hello from my_module!");
}
}
fn main() {
my_module::my_function();
}
9. 错误处理
Rust 使用 Result
和 Option
类型进行错误处理。
fn main() {
let result: Result<i32, &str> = Ok(10);
match result {
Ok(value) => println!("Value: {}", value),
Err(error) => println!("Error: {}", error),
}
let option: Option<i32> = Some(5);
match option {
Some(value) => println!("Value: {}", value),
None => println!("No value"),
}
}
10. 并发
Rust 提供了线程和消息传递的并发模型。
use std::thread;
use std::sync::mpsc;
use std::time::Duration;
fn main() {
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
let val = String::from("hi");
tx.send(val).unwrap();
});
let received = rx.recv().unwrap();
println!("Got: {}", received);
}
通过掌握这些基本语法和概念,就可以开始编写 Rust 程序,并利用其强大的功能和安全特性,在实践中遇到不会的再深入学习。