首页IT科技rust极简教程(Rust极简教程)

rust极简教程(Rust极简教程)

时间2025-06-20 10:52:03分类IT科技浏览7685
导读:据说,Rust语言语法的高门槛是劝退很多人上手的主要原因。...

据说             ,Rust语言语法的高门槛是劝退很多人上手的主要原因             。

确实                        ,Rust语言希望解决 C/C++ 手工管理内存的问题        ,但是又不想引入类似golang         ,java的GC机制                        。

因此                       ,为了能让编译器能够在编译阶段检查出潜在的内存问题            ,Rust的语法上就多了一些其他语言所没有的规则      ,这些规则让上手Rust的难度提高了不少        。

我是觉得                      ,学习一门编程语言                ,不一定要弄懂其中的所有概念才能开始写代码   ,就像我们学习外语                     ,掌握了基本几句话之后其实就可以开始对话练习         。

这篇极简教程的目的                    ,其实不只是针对Rust,任何编程语言都可以有这么一个极简教程                 ,让大家可以尽快用这种编程语言先把代码写起来                        ,边写边学    ,不断加深对语言的理解                       。

因为是极简教程             ,大纲也很简单                        ,主要3部分:

工程管理 变量定义 流程控制

《C程序设计语言》中有一句很经典话:程序 = 数据结构 + 算法

上面的【变量定义】其实就是数据结构        ,【流程控制】就是算法         ,有了这2部分其实就可以编写各种功能            。

最后加了【工程管理】这部分                       ,一方面是因为Rust的管理工具Cargo是它的重要特色之一;另一方面            ,良好的代码组织是完成复杂功能的基础      ,毕竟我们学习Rust                      ,最后是希望用它去完成实际的业务功能的      。

工程管理

通过 cargo 创建 Rust项目                ,可以更好的管理项目的依赖   ,打包和升级等等                      。

所以                     ,尽管是极简教程                    ,还是希望能用 cargo 来管理项目                。

Rust项目一般有两种类型,可执行文件和库   。

我们一般做的软件或者工具最终都会发布成可执行文件                 ,给用户使用                     。

而库不能单独运行                        ,一般是对重要的功能进行封装    ,然后作为其他软件的一部分来使用                    。

创建可执行文件

cargo new rust-examples tree . # 工程结构如下 . ├── Cargo.toml # 这里是工程的配置 └── src └── main.rs

其中 main.rs 是启动文件             ,学习Rust各种语法的时候                        ,可以将代码写在 main.ts 中进行测试。

创建库

cargo new --lib rust-lib tree . . ├── Cargo.toml # 这里是工程的配置 └── src └── lib.rs

这里的 lib.rs 和 main.rs 不同        ,它是不能直接运行的         ,需要通过里面的测试代码来运行相应的功能                 。

变量定义

Rust的基本类型和其他语言大同小异                       ,熟悉其他语言(C/C++, golang等)的话            ,很容易理解                        。

这里我们构造一个简单的学生成绩管理系统      ,通过定义学生信息                      ,演示下Rust中基本类型以及枚举和结构体的使用    。 cargo new stu_manager

在 src/main.rs 中定义并打印学生信息             。

#[derive(Debug)] enum Sex { Boy, Girl, } struct Student { name: String, // 姓名 age: u16, // 年龄 sex: Sex, // 性别 score: f32, // 成绩 } fn main() { let students: [Student; 2] = [ Student { name: String::from("boy01"), age: 18, sex: Sex::Boy, score: 61.5, }, Student { name: String::from("girl01"), age: 16, sex: Sex::Girl, score: 91.5, }, ]; display(&students[0]); display(&students[1]); } fn display(stu: &Student) { println!( "name: {}, age: {}, sex:{:?}, score: {}", stu.name, stu.age, stu.sex, stu.score ); }

说明:

#[derive(Debug)]这个是为了打印enum                ,否则enum类型是不能直接打印的                        。 struct Student这个结构体中定义了常用的基本类型的使用方式        。 let students: [Student; 2]Rust数组的定义方式         。

与其他语言相比   ,Rust变量的一个新的概念就是所有权和借用规则                     ,我的另一篇博客中有介绍                    ,这里不在赘述                       。

Rust所有权和借用规则示例

除此之外,使用的方式和其他语言区别不大                 ,上面示例中                        ,创建了2个学生信息    ,并且分别打印出其中各个字段的信息            。

$ cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.01s Running `target/debug/stu_manager` name: boy01, age: 18, sex:Boy, score: 61.5 name: girl01, age: 16, sex:Girl, score: 91.5

流程控制

掌握了变量定义             ,可以组织我们的数据                        ,再掌握Rust中的流程控制方法        ,那么         ,就能实现实际的业务功能了      。

流程控制主要两种:分支和循环                      。

分支

Rust的分支语法有 if和match两种方式                。

继续完善上面的例子                       ,我们增加一个根据成绩区分优良中差的函数            ,用 if的方式来判断分支   。

fn check_score(stu: &Student) { if stu.score >= 90.0 { println!("学员:{}, 成绩优秀", stu.name); } else if stu.score < 90.0 && stu.score >= 75.0 { println!("学员:{}, 成绩良好", stu.name); } else if stu.score < 75.0 && stu.score >= 60.0 { println!("学员:{}, 成绩中等", stu.name); } else { println!("学员:{}, 成绩不合格!!!", stu.name); } }

再增加一个判断性别的函数      ,用match的方式来判断分支                     。

fn check_sex(stu: &Student) { match stu.sex { Sex::Boy => println!("学员: {} 是男生", stu.name), Sex::Girl => println!("学员: {} 是女生", stu.name), } }

循环

Rust 循环主要有3种方式:

loop 无限循环                      ,自己控制循环退出 while 条件循环 for 条件循环

下面用3种循环方式分别打印学生信息                ,学生成绩信息以及学生性别信息                    。

// loop 循环示例 let mut count = 0; loop { if count == students.len() { break; } display(&students[count]); count += 1; } // while 循环示例 count = 0; while count < students.len() { check_score(&students[count]); count += 1; } // for 循环示例 for stu in students { check_sex(&stu); }

3种循环中   ,还是 for循环最为见解                     ,这也是我们使用最多的循环方式。

总结

这里可以看出                    ,只要会任何一种编程语言,几乎不需要太多Rust特有的知识                 ,我们也可以用Rust来编写代码                 。

当然                        ,Rust的优势    ,比如内存安全和高性能             ,这里并没有体现                        。

这篇博客的目的是希望能够尽快将Rust用起来                        ,用起来之后        ,遇到问题解决问题         ,在用的过程中逐步理解Rust的高阶概念和语法                       ,一步一步成为Rust高手    。

附录

完整的示例如下:

#[derive(Debug)] enum Sex { Boy, Girl, } struct Student { name: String, // 姓名 age: u16, // 年龄 sex: Sex, // 性别 score: f32, // 成绩 } fn main() { let students: [Student; 2] = [ Student { name: String::from("boy01"), age: 18, sex: Sex::Boy, score: 61.5, }, Student { name: String::from("girl01"), age: 16, sex: Sex::Girl, score: 91.5, }, ]; // loop 循环示例 let mut count = 0; loop { if count == students.len() { break; } display(&students[count]); count += 1; } // while 循环示例 count = 0; while count < students.len() { check_score(&students[count]); count += 1; } // for 循环示例 for stu in students { check_sex(&stu); } } fn display(stu: &Student) { println!( "name: {}, age: {}, sex:{:?}, score: {}", stu.name, stu.age, stu.sex, stu.score ); } fn check_score(stu: &Student) { if stu.score > 100.0 { println!("学员:{}, 成绩错误", stu.name); } else if stu.score <= 100.0 && stu.score >= 90.0 { println!("学员:{}, 成绩优秀", stu.name); } else if stu.score < 90.0 && stu.score >= 75.0 { println!("学员:{}, 成绩良好", stu.name); } else if stu.score < 75.0 && stu.score >= 60.0 { println!("学员:{}, 成绩中等", stu.name); } else { println!("学员:{}, 成绩不合格!!!", stu.name); } } fn check_sex(stu: &Student) { match stu.sex { Sex::Boy => println!("学员: {} 是男生", stu.name), Sex::Girl => println!("学员: {} 是女生", stu.name), } } $ cargo run Compiling stu_manager v0.1.0 (/home/wangyubin/projects/rust/stu_manager) Finished dev [unoptimized + debuginfo] target(s) in 0.60s Running `target/debug/stu_manager` name: boy01, age: 18, sex:Boy, score: 61.5 name: girl01, age: 16, sex:Girl, score: 91.5 学员:boy01, 成绩中等 学员:girl01, 成绩优秀 学员: boy01 是男生 学员: girl01 是女生

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
抖音壁纸app(2022最新款带采集功能抖音壁纸小程序源码)