Rust ループ
Rust は柔軟な条件文に加えて、ループ構造の設計も非常に成熟しています。この点は、経験豊富な開発者であれば感じ取れるはずです。
while ループ
while ループは最も典型的な条件文ループです:
例
let mut number = 1;
while number != 4 {
println!("{}", number);
number += 1;
}
println!("EXIT");
}
実行結果:
1 2 3 EXIT
Rust 言語には、このチュートリアルが編纂された時点では do-while の使い方はありませんが、do は予約語として規定されており、将来のバージョンで使われるかもしれません。
C 言語では for ループは 3 つの式でループを制御しますが、Rust にはこのような使い方はなく、while ループで代用する必要があります:
C 言語
for (i = 0; i < 10; i++) {
// ループ本体
}
Rust
while i < 10 {
// ループ本体
i += 1;
}
for ループ
for ループは最もよく使われるループ構造で、線形データ構造(配列など)を走査するためによく使われます。for ループで配列を走査する場合:
例
let a = [10, 20, 30, 40, 50];
for i in a.iter() {
println!("値は : {}", i);
}
}
実行結果:
值为 : 10 值为 : 20 值为 : 30 值为 : 40 值为 : 50
このプログラムの for ループは配列 a の走査を行っています。a.iter() は a のイテレータ(iterator)を表しており、オブジェクトに関する章を学ぶまでは詳述しません。
もちろん、for ループは実際には添え字(インデックス)で配列にアクセスすることもできます:
例
let a = [10, 20, 30, 40, 50];
for i in 0..5 {
println!("a[{}] = {}", i, a[i]);
}
}
実行結果:
a[0] = 10 a[1] = 20 a[2] = 30 a[3] = 40 a[4] = 50
loop ループ
経験豊富な開発者であれば、次のような状況に何度か遭遇したことがあるはずです:あるループが先頭と末尾でループを続行するかどうかを判断できず、ループ本体の途中のどこかでループの進行を制御しなければならない場合です。このような場合、私たちはよく while (true) ループ本体の中で途中でループを抜ける操作を実装します。
Rust 言語にはネイティブの無限ループ構造 —— loop があります:
例
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
loop {
let ch = s[i];
if ch == 'O' {
break;
}
println!("\'{}\'", ch);
i += 1;
}
}
実行結果:
'R' 'U' 'N'
loop ループは break キーワードによって、return のようにループ全体を終了させ、外部に戻り値を渡すことができます。これは非常に巧妙な設計です。なぜなら、loop のようなループは検索ツールとしてよく使われ、何かを見つけたら当然その結果を渡す必要があるからです:
例
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
let location = loop {
let ch = s[i];
if ch == 'O' {
break i;
}
i += 1;
};
println!(" \'O\'のインデックスは {}", location);
}
実行結果:
'O' 的索引为 3その他の拡張