rust编程教程中文:一起学Rust编程,4
今天我们来看Rust里的分支和循环。前半部分是熟悉的if/else分支和for循环;后半部分我们一起来看比较特别的模式匹配。
if/else基本语法:
if <condition> { // code} else if <condition> { // code}
比如:
if 3 > 2 { println!("3 is greater than 2");} else { println!("3 is not greater than 2");}
执行上面的代码输出“3 is greater than 2″。
if不单单是语句而是表达式,所以可以用于赋值语句(注意作为返回值的表达式true和false没有加分号):
let world_is_sane = if 3 > 2 { println!("3 is greater than 2"); true } else { println!("3 is not greater than 2"); false };
这个写法比起C语言的三元运算来说清晰很多。
记得所有的分支都得返回同一个类型的值,否则编译器会报错。比如如果我把false误写成了0:
Rust做了极大的努力保证编译错误信息清晰易读。如果对出错原因不太清楚,可以按最后的提示查看语法的说明:rustc --explain E0308,这个特性真的很友好。
loop/while/forRust有3个循环语法。
loop是无条件循环
loop { // code}
while和for是有条件循环
while <condition> { // code}for i in 0..100 { // code}
loop和for有一些别的语法糖,包括返回值,用于嵌套break的标签,闭区间和迭代器,我们暂时不去管它。在语言学习中,语法是一个跟使用时间成正比的肌肉记忆工作,很多用法在初学阶段并不是必需的,可以在后面使用中慢慢熟悉。
模式匹配match最基本的match语句类似一个精简的if ... else if ... else if ...else,也就是对一个条件表达式分情况讨论:
let number = 10; match number { 1..=9 => println!("1"), 10..=99 => println!("2"), 100..=999 => println!("3"), _ => println!("too many") }
=>左边的部分是匹配条件。可以是单个的值,也可以是x..=y的闭区间,a | b | c 匹配多个值之一,或者_表示其他情况。
=>右边的部分是匹配成功对应的表达式,以逗号结尾。
Rust语法要求match条件是完备的,也就是分支必须覆盖所有可能的情况。也就是说大多数时候,必须有一个默认分支_ => ...。
在Rust的设计里,基本不存在使用默认的或者隐含的逻辑的余地,而是尽量鼓励开发者去考虑所有可能的情况。这对写出健壮的代码非常有用。
match也可以用作表达式:
let number = 10;let digits = match number { 1..=9 => 1, 10..=99 => 2, 100..=999 => 3, _ => -1,}
match还可以对元组,枚举,指针和结构体做解构匹配(destructuring match)。用我们已经见过的元组为例:
let p = (1, 0); let non_zero_value = match p { (x, 0) => x, (0, y) => y, _ => -1, };
这种语法对枚举值非常有用,我们在后面学习枚举类型时会大量用到。
最后,我们结合一个新的print!语法来打印九九乘法表。跟println!()一样,这里唯一的新语法就是可以用{}来打印一个标量的值:
fn main() { for a in 1..10 { for b in a..10 { let newline = if b == 9 { "\n" } else { " " }; print!("{}x{}={}{}", a, b, a * b, newline); } }}
关注红小豆,一起学习Rust开发。欢迎点赞,转发,收藏!
- 02-0135岁考试能考什么?江西妈妈承诺儿子考双百去三亚
- 12-27文件管理系统开源程序:基于Web的文件管理系统MxsDoc
- 11-03微信朋友圈多长时间可以清理:微信朋友圈你多久没有清理和维护了
- 03-04ai人工智能第三浪8月何时起飞,从瞎聊到依赖,过去9
- 04-09枕上书续写帝君服侍凤九简书:枕上书续编3.帝君与凤九沉睡十里桃林
- 11-08擎天柱和大黄蜂的载具形态:你还记得你的老战友大黄蜂我么
- 12-04江湖不是人走茶凉而是人情世故 江湖之下是鱼情江湖之上是人情
- 03-09资本论是一个什么样的著作?资本论第一卷出版150周年
- 03-07戴老师紫牛 70岁了还学游泳陪他冰冷湖中畅游20年
- 12-15倒计时js代码的思路,js实现10秒倒计时的小实例
- 01-01膝关节疼痛怎么查病因?年轻小伙膝关节疼痛疼痛两年
- 04-30itunes怎么恢复手机系统?iTunes如何恢复iOS系统操作
- 02-07创造与魔法合成六阶疯疯兔全过程:6399:创造与魔法岩石怪解析一览
- 04-12苹果拨号盘快速查找联系人并拨号:iPhone常用联系人一键拨号
- 02-20皮肤护理小技巧大全:中性皮肤的护理技巧和方法
- 01-09好看又看不腻的书推荐,十本可以连刷多遍的高分佳作
热门
推荐
- 1秋天树叶粘贴图片欣赏269
- 2甲午中日战争的影响|甲午中日战争和民族危机的加深353
- 3华为8怎么隐藏应用106
- 4目送名著龙应台阅读题及答案105
- 5有关法制建设经典宣传海报图片421
- 6三年级作文熟悉的人285
- 7爱情现代诗歌最委婉的作品262
- 8张小娴的经典爱情语录154