← 解説「イテレータ — 要素を順に取り出す」に戻る
サンプルコードで身につける: イテレータ — 要素を順に取り出す
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1next() で1つずつ取り出す
iter() で作ったイテレータの next() を直接呼び、Some(要素) が順に返って最後に None になる様子を観察する最小の例です。「順に取り出し、尽きたら None」というこの動きがイテレータのすべての土台です。Option がここで再登場している点にも注目してください。
Rust
2for ループの正体はイテレータ
for n in numbers.iter() と for n in &numbers は同じ動きをします。普段書いている for ループは、内部でイテレータの next() を呼び続ける構文だと確かめる例です。この対応が分かると「ループで書くか、イテレータのメソッドで書くか」を選べるようになります。
Rust
3sum と count — 全要素を消費する
sum() や count() は、内部で next() を尽きるまで呼んで結果を1つにまとめる「消費メソッド」です。手書きの合計ループが1行になり、カウンタ変数も不要になります。テストの点数集計のような処理は、実務でもこの形で書くのが標準です。
Rust
4文字列の chars() もイテレータ
イテレータは Vec 専用ではなく、文字列の chars() も「文字を順に取り出すイテレータ」を返します。next() で先頭から1文字ずつ取り出せ、count() なら文字数が数えられます。文字列のレッスンで使った chars().count() の正体がここでつながります。
Rust
5気温データの集計レポート
sum・max・min を組み合わせて、1週間の気温データから集計レポートを作る例です。max と min は「要素が1つもないかもしれない」ので Option を返し、match で受けます。ログやメトリクスの集計など、実務の「データをなめて要約する」処理の基本形です。
Rust