位置: IT常识 - 正文

Rust极简教程(rust基础操作)

编辑:rootadmin
据说,Rust语言语法的高门槛是劝退很多人上手的主要原因。 确实,Rust语言希望解决 C/C++ 手工管理内存的问题,但是又不想引入类似golang,java的GC机制。 因此,为了能让编译器能够在编译阶段检查出潜在的内存问题,Rust的语法上就多了一些其他语言所没有的规则,这些规则让上手Rust ...

推荐整理分享Rust极简教程(rust基础操作),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:rust 教程,rust 入门教程,rust基础操作,rust 快速入门,rust 入门教程,rust 教程,rust 快速入门,rust 入门教程,内容如对您有帮助,希望把文章链接给更多的朋友!

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

确实,Rust语言希望解决 C/C++ 手工管理内存的问题,但是又不想引入类似golang,java的GC机制。因此,为了能让编译器能够在编译阶段检查出潜在的内存问题,Rust的语法上就多了一些其他语言所没有的规则,这些规则让上手Rust的难度提高了不少。

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

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

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

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

《C程序设计语言》中有一句很经典话:程序 = 数据结构 + 算法上面的【变量定义】其实就是数据结构,【流程控制】就是算法,有了这2部分其实就可以编写各种功能。最后加了【工程管理】这部分,一方面是因为Rust的管理工具Cargo是它的重要特色之一;另一方面,良好的代码组织是完成复杂功能的基础,毕竟我们学习Rust,最后是希望用它去完成实际的业务功能的。

工程管理

通过 cargo 创建 Rust项目,可以更好的管理项目的依赖,打包和升级等等。所以,尽管是极简教程,还是希望能用 cargo 来管理项目。

Rust项目一般有两种类型,可执行文件和库。我们一般做的软件或者工具最终都会发布成可执行文件,给用户使用。而库不能单独运行,一般是对重要的功能进行封装,然后作为其他软件的一部分来使用。

创建可执行文件cargo new rust-examplestree . # 工程结构如下.├── Cargo.toml # 这里是工程的配置└── src └── main.rs

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

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

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

变量定义

Rust的基本类型和其他语言大同小异,熟悉其他语言(C/C++, golang等)的话,很容易理解。这里我们构造一个简单的学生成绩管理系统,通过定义学生信息,演示下Rust中基本类型以及枚举和结构体的使用。

cargo new stu_managerRust极简教程(rust基础操作)

在 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 runFinished dev [unoptimized + debuginfo] target(s) in 0.01sRunning `target/debug/stu_manager`name: boy01, age: 18, sex:Boy, score: 61.5name: 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.5name: girl01, age: 16, sex:Girl, score: 91.5学员:boy01, 成绩中等学员:girl01, 成绩优秀学员: boy01 是男生学员: girl01 是女生
本文链接地址:https://www.jiuchutong.com/zhishi/310339.html 转载请保留说明!

上一篇:java门面模式是什么(spring 门面模式)

下一篇:PHP中define定义常量的方法(php中使用什么函数来定义常量)

  • 淘宝收货手机号怎么隐藏(淘宝收货手机号更改)

    淘宝收货手机号怎么隐藏(淘宝收货手机号更改)

  • word页眉怎么设置成每页不同内容(word页眉怎么设置奇偶页不同)

    word页眉怎么设置成每页不同内容(word页眉怎么设置奇偶页不同)

  • iphonese怎么录屏(苹果se1怎么录屏)

    iphonese怎么录屏(苹果se1怎么录屏)

  • 苹果11锁屏密码突然不对(苹果11锁屏密码找回教程)

    苹果11锁屏密码突然不对(苹果11锁屏密码找回教程)

  • 执行linkexe时出错怎么解决(执行link时出错)

    执行linkexe时出错怎么解决(执行link时出错)

  • pr标记快捷键(pr标记是哪个键)

    pr标记快捷键(pr标记是哪个键)

  • midaspay是什么安装包(midas什么意思中文)

    midaspay是什么安装包(midas什么意思中文)

  • 调音台st什么意思(调音台st in)

    调音台st什么意思(调音台st in)

  • 手机进水可以充电吗(手机进水可以充电了还会怎么样吗)

    手机进水可以充电吗(手机进水可以充电了还会怎么样吗)

  • 为什么qq匹配聊天不能匹配了(为什么qq匹配聊天没反应)

    为什么qq匹配聊天不能匹配了(为什么qq匹配聊天没反应)

  • iphone响很久用户正忙(iphone响很久弹出用户正忙是不是关机了)

    iphone响很久用户正忙(iphone响很久弹出用户正忙是不是关机了)

  • 手机qq不小心退群了如何恢复(手机qq不小心退出qq群)

    手机qq不小心退群了如何恢复(手机qq不小心退出qq群)

  • 荣耀20pro怎么清理内存(荣耀20pro怎么清除蓝牙配对记录)

    荣耀20pro怎么清理内存(荣耀20pro怎么清除蓝牙配对记录)

  • 小度智能音箱pro对比大金刚(小度智能音箱pro怎么联网)

    小度智能音箱pro对比大金刚(小度智能音箱pro怎么联网)

  • 被挡访客可解锁是什么意思(被挡访客怎么解除)

    被挡访客可解锁是什么意思(被挡访客怎么解除)

  • 闲聊提现延迟怎么办(闲聊提现要好久)

    闲聊提现延迟怎么办(闲聊提现要好久)

  • qq邮箱号码在哪里看(qq邮箱号码在哪里看手机)

    qq邮箱号码在哪里看(qq邮箱号码在哪里看手机)

  • 怎样用手机号登录抖音(怎样用手机号登录爱奇艺会员)

    怎样用手机号登录抖音(怎样用手机号登录爱奇艺会员)

  • ps怎么调整图片角度(ps怎么调整图片角度到合适位置)

    ps怎么调整图片角度(ps怎么调整图片角度到合适位置)

  • 手机银行怎么卸载(手机银行怎么开通)

    手机银行怎么卸载(手机银行怎么开通)

  • 手机卡一直欠费会怎么样(手机卡一直欠费不交会怎么样)

    手机卡一直欠费会怎么样(手机卡一直欠费不交会怎么样)

  • 流量提醒在哪里设置(流量提醒在哪里打开)

    流量提醒在哪里设置(流量提醒在哪里打开)

  • 微信显示手机号码怎么取消(微信显示手机号码怎么弄)

    微信显示手机号码怎么取消(微信显示手机号码怎么弄)

  • 拼多多免拼卡在哪看(拼多多免拼卡在哪里看怎么使用)

    拼多多免拼卡在哪看(拼多多免拼卡在哪里看怎么使用)

  • 苹果手机抖音怎么导入本地音乐(苹果手机抖音怎么去掉抖音号水印)

    苹果手机抖音怎么导入本地音乐(苹果手机抖音怎么去掉抖音号水印)

  • 电视家怎么看回放(电视家怎么看回放节目)

    电视家怎么看回放(电视家怎么看回放节目)

  • 手机查找定位(手机查找定位系统)

    手机查找定位(手机查找定位系统)

  • ChatGPT API接口使用+fine tune微调+prompt介绍(api接口长什么样)

    ChatGPT API接口使用+fine tune微调+prompt介绍(api接口长什么样)

  • 目标检测算法——YOLOv5/v7/v8改进结合涨点Trick之Wise-IoU(超越CIOU/SIOU)(运动目标检测算法)

    目标检测算法——YOLOv5/v7/v8改进结合涨点Trick之Wise-IoU(超越CIOU/SIOU)(运动目标检测算法)

  • 增值税纳税申报表模板
  • 纳税期限届满
  • 计提工资是计提哪个月的
  • 企业销售折扣折让会计分录
  • 开专票还是开普发票
  • 银行承兑汇票是什么科目
  • 购买债券的利息会计分录
  • 购销合同印花税怎么算
  • 公司茶水间有什么
  • 总分机构账务处理
  • 企业所得税查增值税吗
  • 超范围经营如何举报
  • 收到货款做账
  • 收到小额贷款怎么做账
  • 长期借款按月计提
  • 企业生产成本核算的一般程序为
  • 出口退税需要货代提供什么资料
  • 增值税清单模板样例导出
  • 个人汽车租赁发票网上怎么开
  • 在建工程暂估入库的账务处理
  • 代销协议书
  • 什么情况可以出境
  • 借款利息资本化条件
  • 鸿蒙系统怎么开发
  • 单位价值5000元二手设备怎么算
  • 自己怎么做电脑系统
  • linux的ps命令用法
  • 交接目录excel
  • 营业利润是怎么计算的?
  • 发票红冲是什么意思需要给钱吗
  • 预计负债的所得税怎么算
  • php添加扩展
  • vue数据更新会触发什么生命周期
  • 存货的核算方法一次可以选用几个
  • 编制记账凭证出现错误
  • 合伙企业分红个税税率表
  • ai当前的发展
  • php输出空格语句
  • 企业年报网上申报入口贵州
  • 房地产开发费用最高扣除比例
  • 资产负债表里长期股权投资是什么意思
  • vue生命周期钩子函数
  • 电缆租赁发票开具属于什么项目
  • mysql日期和时间分开存的 索引
  • 哪些项目的进项不含税
  • 库存现金错账怎么调整
  • 可抵扣进项税额包括进项税额转出吗
  • 应付职工薪酬账户期初余额为4000元
  • 库存商品坏账准备怎么算
  • 开票系统维护费怎么做账
  • 企业固定资产清理流程
  • 教育机构的咨询
  • sql server 批量删除
  • sql有什么
  • SQLSERVER中union,cube,rollup,cumpute运算符使用说明
  • macza
  • info.exe是什么病毒
  • linux命令怎么执行
  • 电脑如何将win10设置为win7
  • linux系统如何禁用光驱
  • windows 10预览版
  • win8.1 安装
  • 哪些游戏是c#开发的
  • 微信小程序实现留言功能
  • jquery点击a标签
  • shell中的注释用什么表示
  • jquery validate表单校验长度
  • shell脚本编程实例
  • jquery解析json对象
  • unity3drpg游戏
  • python 文件操作,读,写,指定位置
  • 国家税务局内蒙古税务
  • 北京地税税务总局官网
  • 历年房产税
  • 江苏宿迁个体户那个园区好
  • 职工疗养费可以税前扣除吗
  • 企业所得税的纳税期限按什么计征
  • 地税登录密码忘记了怎么办
  • 电子税务局开发票流程
  • 两会热点有哪些呀?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设