3.2 循环
循环是在满足指定条件的情况下,重复执行一段代码。Rust中有3种循环。
1)loop:重复执行、永远不会结束的循环。
2)while:在条件表达式的值为true时永远执行的循环。
3)for:重复执行指定次数的循环。
3.2.1 loop循环
loop循环没有循环条件,会无限次重复执行一段代码,直到调用break语句退出循环。break语句是循环控制语句,用于退出循环并将返回值返回。
代码清单3-1中,第2行代码声明了变量count并将其初始化为0,第3行代码声明的变量counter用来存放loop循环的返回值。第4~10行是loop循环执行的代码,每一次循环会将count加1,并检查count的值是否等于10。当count的值等于10时,使用break语句退出循环并返回count*2的值。此时,counter的值是20。
代码清单3-1 loop循环
1 fn main() { 2 let mut count = 0; 3 let counter = loop { 4 count += 1; 5 let counter = count * 2; 6 println!("count: {}, counter: {}", count, counter); 7 8 if count == 10 { 9 break counter; 10 } 11 }; 12 } 13 14 // count: 1, counter: 2 15 // count: 2, counter: 4 16 // ... 17 // count: 10, counter: 20
3.2.2 while循环
while循环会在每次执行代码之前进行条件判断,只要条件表达式的值为true就会重复执行代码。while循环不需要loop循环中必须使用的if条件判断和break语句,让代码结构更加简洁。
代码清单3-2中,使用while循环重构代码清单3-1,实现了相似的功能,但省掉了使用if条件判断和break语句的烦琐。
代码清单3-2 while循环
1 fn main() { 2 let mut count = 0; 3 let mut counter = 0; 4 while count != 10 { 5 count += 1; 6 counter = count * 2; 7 println!("count: {}, counter: {}", count, counter); 8 } 9 } 10 11 // count: 1, counter: 2 12 // count: 2, counter: 4 13 // ... 14 // count: 10, counter: 20
3.2.3 for循环
for循环使用“for…in…”的语法格式,是一种重复执行指定次数的循环。因其安全性和简洁性常用于对范围类型或集合类型的所有元素执行指定的操作。
代码清单3-3中,使用for循环实现了与代码清单3-1和代码清单3-2同样的功能,可以看到for循环的代码是最简洁的。
代码清单3-3 for循环
1 fn main() { 2 let mut counter = 0; 3 for count in 1..=10 { 4 counter = count * 2; 5 println!("count: {}, counter: {}", count, counter); 6 } 7 } 8 9 // count: 1, counter: 2 10 // count: 2, counter: 4 11 // ... 12 // count: 10, counter: 20
3.2.4 continue和break语句
continue和break都是用于循环控制的语句。break语句直接退出循环,不再执行循环体内的任何代码。而continue语句仅是跳出当前轮循环,不再执行循环体内continue语句之后的代码,但它会再次进行条件判断,决定是否重复执行循环。
代码清单3-4中,第3行代码在i等于0或者4时,会跳出当前轮循环,不再执行循环体内余下的代码,因此不会打印0和4这两个数字。第4行代码在i等于6时会退出循环,因此不会打印6、7、8、9这4个数字。
代码清单3-4 continue和break语句
1 fn main() { 2 for i in 0..10 { 3 if i == 0 || i == 4 { continue; } 4 if i == 6 { break; } 5 6 println!("i: {}", i); 7 }; 8 } 9 10 // i: 1 11 // i: 2 12 // i: 3 13 // i: 5