制御フロー
チェックポイント
- `for` ループ Essential Rustで最もよく使われるイテレーションの形:`for x in expr { … }` は`0..n`のような範囲、`&v`のようなスライス、配列、あるいは`IntoIterator`を実装する任意の値のすべての要素を走査する。三つの使い方(`for x in v`、`for x in &v`、`for x in &mut v`)とそれぞれが要素の所有権とどう関係するかを学ぶ。
- `if` 式 Essential Rustの`if`は文ではなく*式*であり、すべての分岐が同じ型の値を生成し、`if`/`else`全体を束縛に代入できる。`if`と`if let`の違い、`else`を省略できるのが`if`を文として使う場合(`()`を返す場合)に限られる理由、そして慣用的な「早期リターン」パターン`if cond { return foo; }`を学ぶ。
- イテレータ Essential すべての`for`ループの背後にあるのは`Iterator`トレイト——`fn next(&mut self) -> Option<Self::Item>`というひとつのメソッドが値を一つずつ生成する。イテレータ*アダプター*(`map`・`filter`・`take`・`chain`)が遅延評価でパイプラインを構成する仕組み、*コンシューマー*(`collect`・`sum`・`fold`・`for_each`)がそれを駆動する仕組み、そしてこのスタイルが慣用的でかつ等価な手書きループと同じ速さである理由を学ぶ。
- `match` 式 Essential Rustの`match`式は値をパターンのリストと照合し、最初にマッチしたアームのコードを実行する。`match`が*式*である理由(値を生成する)、網羅性チェック(exhaustiveness)によってすべてのバリアントを必ず処理できる保証の仕組み、そしてガード(`if`)でアームをさらに絞り込む方法を学ぶ。
- `while` と `loop` Essential Rustの無限ループ構文:`while cond { … }` は条件が成立する間実行され、`loop { … }` は`break`するまで永遠に実行され、`while let pat = expr { … }` はパターンがマッチし続ける間ループする。`loop`だけが値を生成できる理由(`break value`を通じて)と、リトライループやイベントループの慣用的な形を学ぶ。