rust学习四、控制语句
1.rust学习一、入门之搭建简单开发环境2.rust学习二、入门之运行单个脚本
3.rust学习四、控制语句
4.rust学习五、认识所有权5.rust学习三、基本类型6.rust学习六、简单的struct结构7.rust学习七、枚举8.rust学习八、包和模块9.rust学习九.1、集合之向量10.rust学习九.2、集合之字符串11.rust学习九.3、集合之哈希映射表12.rust学习十、异常处理(错误处理)13.rust学习十一.1、泛型(通用类型)14.rust学习十一.2、利用Trait(特质)定义通用类型的共同行为15.rust学习十一.3、生命周期标记16.rust学习十二、测试17.rust学习十二、一个I/O程序练习18.rust学习十三.1、匿名函数(闭包)19.rust学习十三.2、迭代器20.rust学习十四.1、编译和发布单元包Crate21.rust学习十四.2、工作空间(workspace)22.rust学习十五.1、智能指针基本概念23.rust学习十五.2、智能指针之Box(盒子)指针24.rust学习十五.3、智能指针相关的Deref和Drop特质25.rust学习十五.4、Rc和RefCell指针26.rust学习十五.5、引用循环和内存泄露27.rust学习十六.1、并发-乱弹和一个简单并发例子28.rust学习十六.2、并发-利用消息传递进行线程间通讯29.rust学习十六.3、并发-线程之间共享数据30.rust学习十七.1、async和await31.rust学习十八.1、RUST的OOP和简单示例32.rust学习十九.1、模式匹配(match patterns)rust的控制语句和大部分语言没有什么区别,都是熟悉的for,while,loop,if。
比较不同的是,在绝大部分非常流行的语言中都有的switch,rust是没有的。
诸如c/c++,java,javascript,c#。连PL/SQL都有case when语句。
一、基本的for、while、if,loop
示例-for,while,loop,if
/** 学习控制流 条件 if 循环 for,loop,while 注意:for有各种各样的实现方式 */ use std::io; fn main() { println!("请输入你的年龄"); let mut age = String::new(); io::stdin().read_line(&mut age).expect("读取失败"); let age: u32 = age.trim().parse().expect("请输入一个数字"); let mut desc = String::new(); let mut total: u32 = 0; //1.0 测试 if ,else if if (age < 20) { println!("你是{}岁,还年轻", age); total = cal_young(age); } else if (age < 70) { println!("你是{}岁,正当壮年,是国家和家庭栋梁", age); total = cal_strong(age); } else { println!("你是{}岁!老骥伏枥,志在千里;壮士暮年,烈心不已", age); total = cal_old(age); } //1.1 测试if 条件表达式赋值 //rust的函数和许多语句中,如果最后一个语句不带分号,往往表示返回值 desc = if age < 70 { "壮年".to_string() } else { "老年".to_string() }; println!("{}岁,属于{}", age, desc); println!("总数={}", total); //for 循环比较多实现方式 // a. in [] array ,例如 in [1,2,3] // b. in range ,例如 in (1..10),但10不在内 if (age <= 50) { let fib: u32 = calFb(age); println!("{}的斐波那契值={}", age, fib); } test_for_with_array(); test_for_with_tuple(); } //for循环-数组 fn test_for_with_array() { println!("for遍历数组"); for i in [1, 2, 3, 10] { println!("数组元素:{}", i); } } //for循环-元组,.. //使用..的时候,两边带不带()都是一样的。带()主要是为了构建一个对象,便于左其它操作 fn test_for_with_tuple() { for i in (1..5) { println!("{}", i); } for i in 6..10 { println!("{}", i); } //倒数 // for i in (1..10).rev() { println!("倒数:{}", i); } } fn cal_young(a: u32) -> u32 { let mut total: u32 = 0; //测试for循环 //注意 写成 n..m 那么上限是不会计算在内的 for i in 1..a + 1 { total += i; } return total; } fn cal_strong(a: u32) -> u32 { let mut i = 0; let mut total: u32 = 0; //测试loop,必须内部加break; loop { i = i + 1; total = total + i; if (i == a) { break; } } return total; } fn cal_old(a: u32) -> u32 { let mut total: u32 = 0; let mut i = 0; //测试while while i < a { i = i + 1; total = total + i; } return total; } /** 计算斐波那契,但是这个不要用于计算太大的值,因为这个递归算法极其低效 计算50以内还马马虎虎 注意:如果有错误,那么非蛇形的命名方式会被编译器提示出来 */ fn calFb(n: u32) -> u32 { if (n == 1) { return 1; } else if (n == 2) { return 1; } else { return calFb(n - 1) + calFb(n - 2); } }
这其中for的格式比较多,许多语言都有这种现象,例如JAVA。
二、rust的for可以的格式
for i in n.m 使用它使用 std::iter::Range
或 std::iter::RangeInclusive
迭代器
for i in (n..m).rev()
for i in [x,y,z]
其它还有基于map,向量,枚举的便捷方式这些对象元素的方式
对于map,向量、枚举的,后续补充例子。
三、match而不是switch
在有关书籍中,第一个例子就有match。
match guess.cmp(&secret_str){ Ordering::Less => println!("偏小"), Ordering::Greater => println!("偏大"), Ordering::Equal => {println!("恭喜,你赢了!你总共花费了{}次",try_times);is_ok=true;} };
按照文档的描述,rust的match是一个比较奇特的东西。
match和JAVA17以上的switch还是有一定相似度的,也不知道谁抄谁。
在rust的书本上<<Rust权威指南>>把match吹了一番。
闲话少扯,还是先掌握match的一些基本内容吧。
四、小结
和大部分语言差不多,rust的控制结构没有特别的,这很好,因为它奇怪的语法已经够多了。
和现代大部分的语言语言一样,rust也力图让for循环变得更加方便一些。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇