Merge pull request #712 from AllanDowney/patch1

Update: unified format
pull/737/head
Sunface 3 years ago committed by GitHub
commit cb8e5710a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -6,7 +6,7 @@
## 使用 if 来做分支控制 ## 使用 if 来做分支控制
> if else 无处不在 - 鲁迅 > if else 无处不在 -- 鲁迅
但凡你能找到一门编程语言没有 `if else`,那么一定更要反馈给鲁迅,反正不是我说的:) 总之,只要你拥有其它语言的编程经验,就一定会有以下认知:`if else` **表达式**根据条件执行不同的代码分支: 但凡你能找到一门编程语言没有 `if else`,那么一定更要反馈给鲁迅,反正不是我说的:) 总之,只要你拥有其它语言的编程经验,就一定会有以下认知:`if else` **表达式**根据条件执行不同的代码分支:
@ -56,7 +56,7 @@ error[E0308]: if and else have incompatible types
found type `&str` found type `&str`
``` ```
#### 使用 else if 来处理多重条件 ## 使用 else if 来处理多重条件
可以将 `else if``if`、`else` 组合在一起实现更复杂的条件分支判断: 可以将 `else if``if`、`else` 组合在一起实现更复杂的条件分支判断:
@ -82,20 +82,20 @@ fn main() {
如果代码中有大量的 `else if ` 会让代码变得极其丑陋,不过不用担心,下一章的 `match` 专门用以解决多分支模式匹配的问题。 如果代码中有大量的 `else if ` 会让代码变得极其丑陋,不过不用担心,下一章的 `match` 专门用以解决多分支模式匹配的问题。
## 循环控制 # 循环控制
循环无处不在,上到数钱,下到数年,你能想象的很多场景都存在循环,因此它也是流程控制中最重要的组成部分之一。 循环无处不在,上到数钱,下到数年,你能想象的很多场景都存在循环,因此它也是流程控制中最重要的组成部分之一。
在 Rust 语言中有三种循环方式:`for`、`while` 和 `loop`,其中 `for` 循环是 Rust 循环王冠上的明珠。 在 Rust 语言中有三种循环方式:`for`、`while` 和 `loop`,其中 `for` 循环是 Rust 循环王冠上的明珠。
#### for 循环 ## for 循环
`for` 循环是 Rust 的大杀器: `for` 循环是 Rust 的大杀器:
```rust ```rust
fn main() { fn main() {
for i in 1..=5 { for i in 1..=5 {
println!("{}",i); println!("{}", i);
} }
} }
``` ```
@ -140,10 +140,10 @@ for item in &mut collection {
```rust ```rust
fn main() { fn main() {
let a = [4,3,2,1]; let a = [4, 3, 2, 1];
// `.iter()` 方法把 `a` 数组变成一个迭代器 // `.iter()` 方法把 `a` 数组变成一个迭代器
for (i,v) in a.iter().enumerate() { for (i, v) in a.iter().enumerate() {
println!("第{}个元素是{}",i+1,v); println!("第{}个元素是{}", i + 1, v);
} }
} }
``` ```
@ -183,7 +183,7 @@ for item in collection {
由于 `for` 循环无需任何条件限制,也不需要通过索引来访问,因此是最安全也是最常用的,通过与下面的 `while` 的对比,我们能看到为什么 `for` 会更加安全。 由于 `for` 循环无需任何条件限制,也不需要通过索引来访问,因此是最安全也是最常用的,通过与下面的 `while` 的对比,我们能看到为什么 `for` 会更加安全。
#### `continue` ## `continue`
使用 `continue` 可以跳过当前当次的循环,开始下次的循环: 使用 `continue` 可以跳过当前当次的循环,开始下次的循环:
@ -192,7 +192,7 @@ for item in collection {
if i == 2 { if i == 2 {
continue; continue;
} }
println!("{}",i); println!("{}", i);
} }
``` ```
@ -203,7 +203,7 @@ for item in collection {
3 3
``` ```
#### `break` ## `break`
使用 `break` 可以直接跳出当前整个循环: 使用 `break` 可以直接跳出当前整个循环:
@ -212,7 +212,7 @@ for item in collection {
if i == 2 { if i == 2 {
break; break;
} }
println!("{}",i); println!("{}", i);
} }
``` ```
@ -222,7 +222,7 @@ for item in collection {
1 1
``` ```
#### while 循环 ## while 循环
如果你需要一个条件来循环,当该条件为 `true` 时,继续循环,条件为 `false`,跳出循环,那么 `while` 就非常适用: 如果你需要一个条件来循环,当该条件为 `true` 时,继续循环,条件为 `false`,跳出循环,那么 `while` 就非常适用:
@ -262,7 +262,7 @@ fn main() {
if n > 5 { if n > 5 {
break break
} }
println!("{}",n); println!("{}", n);
n+=1; n+=1;
} }
@ -317,7 +317,7 @@ fn main() {
可以看出,`for` 并不会使用索引去访问数组,因此更安全也更简洁,同时避免 `运行时的边界检查`,性能更高。 可以看出,`for` 并不会使用索引去访问数组,因此更安全也更简洁,同时避免 `运行时的边界检查`,性能更高。
#### loop 循环 ## loop 循环
对于循环而言,`loop` 循环毋庸置疑,是适用面最高的,它可以适用于所有循环场景(虽然能用,但是在很多场景下, `for``while` 才是最优选择),因为 `loop` 就是一个简单的无限循环,你可以在内部实现逻辑通过 `break` 关键字来控制循环何时结束。 对于循环而言,`loop` 循环毋庸置疑,是适用面最高的,它可以适用于所有循环场景(虽然能用,但是在很多场景下, `for``while` 才是最优选择),因为 `loop` 就是一个简单的无限循环,你可以在内部实现逻辑通过 `break` 关键字来控制循环何时结束。
@ -368,8 +368,6 @@ fn main() {
- **break 可以单独使用,也可以带一个返回值**,有些类似 `return` - **break 可以单独使用,也可以带一个返回值**,有些类似 `return`
- **loop 是一个表达式**,因此可以返回一个值 - **loop 是一个表达式**,因此可以返回一个值
## 课后练习 ## 课后练习
> [Rust By Practice](https://zh.practice.rs/flow-control.html),支持代码在线编辑和运行,并提供详细的[习题解答](https://github.com/sunface/rust-by-practice)。 > [Rust By Practice](https://zh.practice.rs/flow-control.html),支持代码在线编辑和运行,并提供详细的[习题解答](https://github.com/sunface/rust-by-practice)。

Loading…
Cancel
Save