全栈程序员的新玩具Rust(二)基本代码入门
先来看这个简单的程序
1.奇怪的关键字
fn=function 函数
mut=mutability 变异性,反义词是immutability 不变性。
2.变量定义
这和其它语言不太一样,普通的语言里变量默认为可变,如果不可变则要标注为readonly
有些语言压根没有不可变这个设计,所有变量都可变。
rust中,let定义的变量为immutability ,不可变,类似于其它语言中的readonly
所以图中的x 为 只读变量,不可变
图中y可以赋值
并且rust 允许覆盖定义,图中x定义了两次,之前的定义会被覆盖掉。
rust号称重视明确性的语言,但是允许覆盖定义难道不会增加不明确性吗?我才刚开始学习,理解不深,这个问题我先放着,以后或许会有答案。
3.字符串格式化输出
用{} 格式化输出了x,y
rust 的字符串设计有一点别扭,查阅资料显示
rust有char,并且char是四字节的,也就是utf32
但是String并不是 vec<char> 而是 vec<u8> 也就是string 是 utf8
所以string 并不能作为char列表访问,而是通过 "नमस्ते".chars()函数,转换为char的列表
这里有个重点记录一下 rust char 是utf32,string是utf8
因为存在utf32也无法一个char表示的字符,所以还是不能认为一个char就是一个字符。但是这已经覆盖了99.99%,我们中文的大部分文字一个utf16字够表达了,超出的那些文字很难遇到。
好让我们写一个更加复杂一点的程序
3.for循环
rust的for 循环 只有foreach一种形态,没有c语言那种for(var i=0;i<10;i++)的形式
1..10是表示一个 1到10的迭代器,不包括10
他的for语句不要小括号
continue 和 break 可以用于跳出循环,和其它语言相似
4.if表达式
if 表达式也和其它语言相似,不同的是 if 表达式的条件部分可以没有括号,也可以有。
但是大括号不可以省略
不允许 if(y==3) continue;这种写法
5.循环标签
rust 提供了循环标签这个概念
循环可以带一个标签,这样做 continue 和 break的时候,可以直接指定要跳出哪一层循环,这样在嵌套循环的情况下可以简化逻辑,而且还更加贴近机器语言行为。
再结合wasm的loops设计一看,嗯,你们搞rust和wasm肯定勾兑了不少。
再来个复杂一点的程序,输出个乘法口诀表吧
6.USE语句
开始写复杂的程序就必须借助库了,这里我们使用了rust标准库的stdout
可以通过use std::io::* 简单解决问题
7.字符串相关
这里通过format 宏连接了字符串,然后用as_bytes()将他变成一个
&[u8]类型,应为stdout().write();要求这个类型
8.expect
expect(“”)这部分不写也可以,这是rust常用的一个封装,返回result,这个函数可能会有失败的情况
.expect(“”)表示失败时输出其中的字符串
rust的很多方法都返回result,可能会失败。当然也可以用if 判断result
.expect(“”)是rust提供的一种快速的异常处理方法。
也挺好
第一个rust 程序,完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2018-12-29 如何给小学生讲清楚ECC椭圆曲线加密
2011-12-29 记录下想法