Rust,被誉为系统编程语言的新星,以其内存安全和高效的并发控制吸引了大量开发者的关注。对于初学者来说,要想快速上手并灵活运用Rust,掌握一些基本的写法和技巧至关重要。以下是Rust入门的50个关键写法的前十个,帮助你轻松迈出Rust编程的第一步。
各位美女帅哥只要老实把下面的代码都敲一遍,以后就不要再说没听过 Rust 了吧~
1. Hello, World!
这是学习任何新编程语言的起点。在Rust中,你可以这样写:
1 | rust复制代码fn main() { |
2. 变量声明
在Rust中,你可以使用let
关键字来声明变量。默认情况下,这些变量是不可变的。
1 | rust复制代码let x = 5; // 不可变变量 |
3. 可变变量
如果你需要一个可以修改的变量,可以在let
之后添加mut
关键字。
1 | rust复制代码let mut y = 10; // 可变变量 |
4. 数据类型
Rust有多种内置的数据类型,如整数、浮点数、布尔值等。
1 | rust复制代码let i32_num: i32 = -12345; // 32位有符号整数 |
5. 元组
元组是一种可以包含多种不同类型元素的复合数据类型。
1 | rust复制代码let tup = (500, "hello", 4.5); // 元组包含整数、字符串和浮点数 |
6. 数组
数组是相同类型元素的连续集合。
1 | rust复制代码let arr = [1, 2, 3, 4, 5]; // 包含5个整数的数组 |
7. 切片
切片是对数组的一部分的引用。
1 | rust复制代码let slice = &arr[1..3]; // 引用数组的第2和第3个元素(索引从0开始) |
8. 控制流 - 条件语句
使用if
、else if
和else
来控制程序的流程。
1 | rust复制代码let num = 3; |
9. 控制流 - 循环
使用for
循环来遍历集合中的元素。
1 | rust复制代码for i in 0..5 { // 遍历0到4的整数序列 |
10. 函数定义
在Rust中,你可以定义自己的函数来执行特定的任务。
1 | rust复制代码fn greet(name: &str) { |
11. 函数返回值
在Rust中,你可以定义有返回值的函数。
1 | rust复制代码fn add(a: i32, b: i32) -> i32 { |
12. 引用和借用
Rust通过引用(&)来借用变量的值,而不直接获取其所有权。
1 | rust复制代码fn print_value(value: &i32) { |
13. 可变引用
可变引用允许你修改引用的值。
1 | rust复制代码fn modify_value(value: &mut i32) { |
14. 结构体(Structs)
结构体允许你定义一个复合数据类型,可以包含多个字段。
1 | rust复制代码struct Person { |
15. 枚举(Enums)
枚举类型用于定义一组命名的值。
1 | rust复制代码enum Color { |
16. 模式匹配(Match)
match
表达式允许你根据枚举或其他类型的值进行分支处理。
1 | rust复制代码match my_color { |
17. Option枚举
Option
是一个表示可能有值或没有值的枚举。
1 | rust复制代码enum Option<T> { |
18. Result类型
Result
类型用于处理可能出错的操作,它包含Ok
或Err
两个变体。
1 | rust复制代码enum Result<T, E> { |
19. 泛型
泛型允许你编写适用于多种类型的函数或结构体。
1 | rust复制代码fn largest<T: Ord>(a: T, b: T) -> T { |
20. 闭包(Closures)和迭代器(Iterators)
闭包是可以捕获环境的匿名函数,而迭代器提供了一种遍历集合元素的方法。
1 | rust复制代码let nums = vec![1, 2, 3, 4, 5]; |
21. 闭包作为函数参数
在Rust中,你可以将闭包作为函数的参数传递。
1 | rust复制代码fn apply<F>(f: F, x: i32) -> i32 where F: Fn(i32) -> i32 { |
22. 使用标准库中的集合
Rust的标准库提供了多种集合类型,如Vec<T>
、HashMap<K, V>
等。
1 | rust复制代码let mut vec = Vec::new(); |
23. 字符串操作
在Rust中,字符串是不可变的,但你可以通过String
类型来创建和修改字符串。
1 | rust复制代码let mut s = String::from("Hello"); |
24. 使用match
进行错误处理
match
可以用于处理Result
类型的错误。
1 | rust复制代码let result: Result<i32, &str> = Ok(42); // 或者Err("Error message") |
25. 生命周期
Rust中的生命周期参数用于指定引用的有效范围,确保数据竞争和悬垂引用的安全。
1 | rust复制代码fn print_longest<'a>(x: &'a str, y: &'a str) { |
26. 使用use
语句导入模块
你可以使用use
语句来导入模块,以便在代码中使用它们。
1 | rust复制代码use std::collections::HashMap; |
27. 实现特征(Traits)
在Rust中,你可以通过实现特征来为类型添加行为。
1 | rust复制代码trait Greeting { |
28. 宏(Macros)
Rust支持宏,它们允许你在编译时生成代码。
1 | rust复制代码macro_rules! print_hello { |
29. 线程安全
Rust提供了多种同步原语,如Mutex
和Arc
,以确保线程安全。
1 | rust复制代码use std::sync::{Arc, Mutex}; |
30. 测试
Rust内置了强大的测试框架,你可以使用#[test]
属性来编写测试函数。
1 | rust复制代码#[test] |
31. 条件编译
Rust支持条件编译,允许你根据某些条件来编译特定的代码块。
1 | rust复制代码#[cfg(test)] |
32. 文档注释
Rust使用特定的注释语法来生成文档。
1 | rust复制代码/// 这是一个文档注释,用于描述下面的函数。 |
/// println!(“Hello, world!”);
/// 1
2
3pub fn hello_world() {
println!("Hello, world!");
}
33. 外部依赖管理
使用Cargo.toml
文件来管理项目的外部依赖。
1 | toml复制代码[dependencies] |
34. 模块系统
Rust有一个强大的模块系统,允许你将代码组织成多个文件和模块。
1 | rust复制代码// lib.rs |
35. 范围
Rust支持使用范围来表示一系列的数值。
1 | rust复制代码for i in 1..=5 { |
36. 所有权和借用
理解Rust的所有权系统和借用检查器是编写安全Rust代码的关键。
1 | rust复制代码fn take_ownership(v: Vec<i32>) { |
37. 默认参数和可变参数
Rust函数支持默认参数和可变参数列表。
1 | rust复制代码fn function_with_default(param: i32 = 10) { |
38. 静态生命周期
在Rust中,你可以使用静态生命周期来指定某个引用的生命周期与整个程序的执行时间一样长。
1 | rust复制代码static MY_CONST: &'static str = "Hello, world!"; |
39. 内部可变性和单元化
Rust提供了Cell
和RefCell
等类型,允许你在不违反Rust所有权规则的情况下实现内部可变性。
1 | rust复制代码use std::cell::Cell; |
40. 不安全代码
在某些情况下,你可能需要编写不安全代码来执行底层操作。Rust提供了unsafe
关键字来处理这些情况。
1 | rust复制代码unsafe fn dangerous_function() { |
41. 泛型
Rust支持泛型编程,允许你编写灵活且可重用的代码。
1 | rust复制代码fn largest<T: Ord>(list: &[T]) -> T { |
42. 特性(Trait)对象
特性对象允许你使用动态分发来处理具有相同特性的多种类型。
1 | rust复制代码trait Animal { |
43. 关联函数和关联类型
在Rust中,你可以在特性中定义关联函数和关联类型。
1 | rust复制代码trait Graph { |
44. 从错误中恢复
使用?
操作符可以方便地处理可能返回Err
的结果。
1 | rust复制代码fn read_file(path: &str) -> Result<String, std::io::Error> { |
45. 自定义错误类型
你可以定义自己的错误类型来实现更复杂的错误处理逻辑。
1 | rust复制代码enum MyError { |
46. 使用Option
和Result
进行错误处理
Rust使用Option<T>
和Result<T, E>
来表示可能失败的操作。
1 | rust复制代码fn divide(a: f64, b: f64) -> Result<f64, &'static str> { |
47. 迭代器
Rust的迭代器提供了一种处理集合中元素的高效方式。
1 | rust复制代码let vec = vec![1, 2, 3, 4, 5]; |
48. 并发与并行
Rust提供了强大的并发和并行支持,如线程、消息传递和异步I/O。
1 | rust复制代码use std::thread; |
49. 结构体更新语法
Rust支持结构体更新语法,可以方便地创建结构体的新实例,同时保留部分字段的值。
1 | rust复制代码struct Point { x: i32, y: i32 } |
50. 宏的高级用法
Rust的宏系统非常强大,支持声明性宏和过程性宏,可以实现复杂的代码生成和抽象。
1 | rust复制代码macro_rules! print_vec { |
本文转载自: 掘金