流程控制
条件判断
满足指定条件执行某个功能
三种条件判断
- if 满足条件,执行功能
- if-else 满足指定条件,执行某个功能,不满足条件执行另一个功能
- if-else if-else 用于多个条件分支执行对应的功能的程序逻辑
if条件判断
if conditional_test { // true执行 }
Rust不会自动将非布尔值转换为布尔值,必须显示使用布尔值作为表达式的值
if-else条件判断
if conditional_test { // true执行 }else{ // false 执行 }
if-else if-else条件判断
if conditional_test_1 { }else if conditional_test_2{ }else{ }
循环
在满足指定条件的情况下,重复执行一段代码
三种循环
- loop 重复执行、永远不会结束的循环
- while 在条件表达式的值为true时永远执行的循环
- for : 重复执行指定次数的循环
loop循环
没有循环条件,无限次重复执行一段代码,直到调用break 退出循环
break : 循环控制语句,退出循环并将返回值返回
let mut count = 0; let counter = loop{ count += 1; let num = count *2; if count == 10 { break num; // 返回num的值 } };
while循环
while循环在每次执行代码前进行条件判断,只要条件表达式的值为true就会重复执行代码。
let mut count = 0; let mut counter = 0; while count != 10 { count += 1; counter = count *2; }
for循环
for循环使用for … in … 语法格式,重复执行指定次数的循环。
因其安全性和简洁性,常用于对范围类型或者集合类型的所有元素执行指定的操作
let mut counter = 0; for count in 1..=10 { counter = count *2; }
continue 和 break 语句
continue 和 break都是用于循环控制的语句。
- break 直接退出循环,不再执行循环体内的任何代码。
- continue 退出本次循环,不再执行循环体continue之后的代码,然后再次条件判断,开始新一轮循环
for i in 0..10 { for i== 0 || i == 4 { continue; } if i== 6 { break; } }
match模式匹配
检查当前值是否匹配一系列模式中的某一个。
模式可以由字面量、变量、通配符和其他内容构成。
每一个模式都是一个分支,程序根据匹配的模式执行相应的代码。
Rust 要求match模式匹配是穷尽式的,即必须穷举所有的可能,否则会导致程序错误。
通配符"_"会匹配没有指定的所有可能的模式。
let age = 6; match age{ 0 => println!("0"), 1..=2 => println!("1..2"), _ => (), }
if let 和 while let 模式匹配
在某些场景中可以替代match模式匹配来简化代码
可以将if let 视为match的语法糖,仅当匹配某一模式时执行代码,并忽略其他所有模式
match value{ Some(7) => println!("seven"), _ => (), }
使用if let 可以简化
if let Some(7) = value { println!("seven"); }
while let 后紧跟的表达式中,左侧为匹配模式,右侧为要匹配的值,两者通过=分隔。
let mut vec = vec![1,2,3,4]; loop{ match vec.pop(){ Some(value) => println!("{}",value), None => break, } }
let mut vec = vec![1,2,3,4]; while let Some(value) = vec.pop(){ println!("{}",value); }