本文へスキップ
BecomeCoder

Rustコース · 第2章 制御構文と関数 · レッスン9

for と範囲 ― コレクションを回す

ブラウザで完結

導入

決まった回数や、配列の各要素をたどるなら for が最適です。Rust の for は「範囲」や「コレクション」を順番に受け取る形で、添字の書き間違いによるバグが起きにくくなっています。

説明

fn main() {
    // 範囲: 0..5 は 0,1,2,3,4(5は含まない)。0..=5 なら5も含む
    for i in 0..5 {
        print!("{i} ");
    }
    println!();

    // 配列を1要素ずつたどる
    let colors = ["赤", "緑", "青"];
    for c in colors {
        println!("色: {c}");
    }

    // 添字も一緒に欲しいとき: enumerate()
    for (index, c) in colors.iter().enumerate() {
        println!("{index}番目: {c}");
    }

    // 逆順
    for i in (1..=3).rev() {
        print!("{i} ");   // 3 2 1
    }
    println!();
}
  • 0..55含まない範囲(0,1,2,3,4)。0..=5 と書くと 5含みます
  • for c in colors … 配列やコレクションを1要素ずつ受け取ります。C言語のように i を用意して colors[i] とする必要がなく、範囲外アクセスのミスが原理的に起きません
  • .enumerate() … 添字と値のペアを返します。.rev() … 逆順にします。

for が「添字」ではなく「要素そのもの」を回すのは、安全性のためだけでなく、後で学ぶイテレータという強力な仕組みの入り口でもあります。

試すには

for i in 0..50..=5 に変えると、出力が 0 1 2 3 4 5 になります。..(含まない)と ..=(含む)の違いは Rust で頻繁に使うので、指に覚えさせておきましょう。

実際に動かしてみよう

下のエディタにRustを書いて「実行」を押すと、学習用シミュレータが println! の出力を表示します(本物のrustcではなく、教材の範囲を再現した軽量エンジンです)。struct・enum・match・トレイト・Vec/String/HashMap・Option/Result なども動きます。本文の例を書き換えて動かしてみましょう(所有権・借用チェッカーのコンパイルエラーは再現しないため、動きの確認用として使ってください)。

Rust — ブラウザ内で実行(学習用シミュレータ)

Rustの教材サブセットを動かす学習用シミュレータを読み込みます(本物のrustcではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。