位置: 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中使用什么函数来定义常量)

  • 微信营销互动活动的运营要素(微信营销策划活动)

    微信营销互动活动的运营要素(微信营销策划活动)

  • 团购作为成都去年餐饮企业主要推广方式 占比已达34%(成团购买)

    团购作为成都去年餐饮企业主要推广方式 占比已达34%(成团购买)

  • 苹果手机镜面翻转在哪设置(苹果手机镜面翻转在哪里)

    苹果手机镜面翻转在哪设置(苹果手机镜面翻转在哪里)

  • 头条注销后能用原手机号再申请吗(头条注销后能用花呗吗)

    头条注销后能用原手机号再申请吗(头条注销后能用花呗吗)

  • 蓝牙耳机听不到声音怎么办(蓝牙耳机听不到微信提示音)

    蓝牙耳机听不到声音怎么办(蓝牙耳机听不到微信提示音)

  • 错误678远程计算机没反应是什么意思(错误678远程计算机没反应怎么办)

    错误678远程计算机没反应是什么意思(错误678远程计算机没反应怎么办)

  • 苹果5sa1530是什么版本(苹果5sa1530是国行吗)

    苹果5sa1530是什么版本(苹果5sa1530是国行吗)

  • 为啥win10装不了eviews(为啥win10装不了eviews3.1)

    为啥win10装不了eviews(为啥win10装不了eviews3.1)

  • 淘宝直播间点赞有什么用(淘宝直播间点赞有火箭付费吗)

    淘宝直播间点赞有什么用(淘宝直播间点赞有火箭付费吗)

  • opporeno充电要多久(opporeno4充电多久)

    opporeno充电要多久(opporeno4充电多久)

  • 亚马逊店铺怎么注册(亚马逊店铺怎么关闭月租)

    亚马逊店铺怎么注册(亚马逊店铺怎么关闭月租)

  • 主板尺寸分类(主板尺寸分类24.4×19.0cm)

    主板尺寸分类(主板尺寸分类24.4×19.0cm)

  • 为什么苹果下载需要验证ID(为什么苹果下载不了软件)

    为什么苹果下载需要验证ID(为什么苹果下载不了软件)

  • word文档中的域是什么意思(word文档的域怎么弄)

    word文档中的域是什么意思(word文档的域怎么弄)

  • 电脑上除以是哪个键(电脑上除以是哪个符号)

    电脑上除以是哪个键(电脑上除以是哪个符号)

  • mac充电器充不进去电(mac充电器充不进去电 反复插拔)

    mac充电器充不进去电(mac充电器充不进去电 反复插拔)

  • word怎么计算平均值(word怎么计算平均得分)

    word怎么计算平均值(word怎么计算平均得分)

  • 快手一天能关注几个人(快手人气自助平台)

    快手一天能关注几个人(快手人气自助平台)

  • 苹果app自动扣费怎么取消(苹果App自动扣费是怎么回事)

    苹果app自动扣费怎么取消(苹果App自动扣费是怎么回事)

  • 摄像头几毫米什么意思(摄像头几毫米几毫米是什么意思)

    摄像头几毫米什么意思(摄像头几毫米几毫米是什么意思)

  • 迅雷影音如何快速播放(迅雷影音如何快进2023)

    迅雷影音如何快速播放(迅雷影音如何快进2023)

  • word怎么删除空格(word怎么删除空白页)

    word怎么删除空格(word怎么删除空白页)

  • 菜鸟驿站如何投诉(菜鸟驿站如何投诉电话人工服务)

    菜鸟驿站如何投诉(菜鸟驿站如何投诉电话人工服务)

  • 没有收到升级推送怎么办 最新升级华为鸿蒙2.0的方法(系统更新没有推送)

    没有收到升级推送怎么办 最新升级华为鸿蒙2.0的方法(系统更新没有推送)

  • ipados16发布时间(ipados15什么时候发布)

    ipados16发布时间(ipados15什么时候发布)

  • 新办企业申请一般纳税人的资料
  • 普票和增值税发票的区别
  • 火车票报销抵扣税率
  • 利润表年度报表
  • 企业购买雇主责任险会计分录
  • 费用类科目分类怎么避免出错
  • 公务接待和商务服务区别
  • 开办费计入管理费用后是否要转出
  • 软件企业收到先征后返的增值税税款是否要缴纳企业所得税
  • 服务业小规模纳税人税率是多少
  • 成品油发票如何同步
  • 注资的设备出售怎么处理
  • 房屋建筑物评估技术鉴定表
  • 企业支付小额劳务费税率
  • 集体土地上的不动产能符合异议28条规定吗
  • 2020年小规模生活服务业优惠政策
  • 哪些情形可以补胎
  • 出口货物 关税
  • 劳务费个人所得税税率
  • 应纳税所得额未减上季度所得税,下季度可补减吗
  • 增值税转型后入账价值
  • 石油天然气用途
  • mac 应用
  • 部门预算编制方法
  • 公司支付货款怎么做账
  • 无形资产摊销是什么科目
  • php如何防止表单重复提交
  • Windows10如何禁止电脑自动安装软件
  • win11新功能
  • 工业企业汽车发生费用处理
  • 小程序在线反编译网页版
  • 债权人将长期债务转为投资
  • 小规模纳税人免税会计分录
  • vite vuex
  • vue引入文件路径@的意思
  • 以前年度损益调整在利润表中怎么填
  • 微信开发怎么实现
  • nerf 入门
  • pythontime模块
  • php邮箱smtp发信源码
  • 网站客服系统在线
  • 上月购进固定资产次月退货已开具红字发票如何入账
  • 租车出差差旅费标准
  • 完税证明能作为抵扣凭证吗
  • 发票开9个点
  • 员工补助每月申报怎么填
  • 不验资实收资本怎么做账
  • 转出未交增值税借方余额表示什么
  • 跨年的进项税额转出要补交税款吗
  • 外籍人员个税汇算清缴流程
  • 房地产公司员工购房
  • 应付职工薪酬为负数什么意思
  • 明年发票可以入到今年有什么惩罚
  • 会计怎么做的
  • 领导出差差旅费怎么报销
  • 如何自己解封微信号呢
  • centos7访问百度的命令
  • pe系统找不到系统
  • win sth
  • 禁止Windows 打游戏怎么办
  • win10无法安装软件怎么解决
  • xp内置语音输入没反应
  • ubuntu server怎么样
  • 苹果mac系统中英文切换
  • 并发控制三个问题
  • OS X Yosemite系统下载失败怎么办?OS X 10.10下载错误解决方法
  • win7设备管理器里面没有网络适配器
  • windows8开机启动项在哪里设置
  • linux有哪几种安装方式
  • Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
  • 激情台球游戏源码大全
  • Androidannotation使用之@Rest与服务器交互的JSON数据转换(二)
  • excel password recovery5.0注册码
  • npm与nodejs
  • fragment里面如何嵌套fragment
  • 广东省为什么电不够用
  • 百望税控盘电子发票发送邮箱
  • 金税盘显示证书口令错误
  • 江苏省2023年1号文
  • 政治部副主任是干嘛的
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设