Rustの制御フロー: 条件分岐とループ
if/elseを式として使い、loop、while、forで繰り返し、Rustの制御フローが値を生み出す様子を学ぶ。
Rust入門シリーズの第3回です。Rustの制御フローは経路を選ぶだけではありません — 多くの構文が値を生成する式なのです。
ifとelse#
let score = 85;
if score >= 90 {
println!("Grade: A");
} else if score >= 70 {
println!("Grade: B");
} else {
println!("Grade: C");
}rust条件はboolでなければなりません — Rustは数値をブールに変換しません。
ifは式#
各分岐は値を返せます。分岐の型はすべて一致する必要があります:
let grade = if score >= 90 { "A" } else { "B" };
println!("{grade}");rustこれは別々の代入よりすっきりします。
loop#
loopはbreakするまで繰り返します:
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // break後の値が結果になる
}
};
println!("{result}"); // 20rustwhile#
let mut n = 3;
while n > 0 {
println!("{n}");
n -= 1;
}rust範囲を使ったfor#
範囲に対するforが慣用的な反復方法です:
for i in 0..5 {
println!("{i}");
}rust0..5は末尾を含みません。0..=5は末尾を含みます。コレクションも反復できます:
let names = ["Ada", "Grace", "Linus"];
for name in names {
println!("{name}");
}rustbreakとcontinue#
breakはループを即座に抜けます。continueは現在の反復の残りをスキップします。
for i in 0..10 {
if i % 2 == 0 {
continue;
}
if i > 7 {
break;
}
println!("{i}");
}
// 出力: 1 3 5 7rust結論#
Rustの制御フローは表現力豊かで安全です。truthy/falsyの驚きはなく、分岐が値を生成できます。シリーズ次回は関数です。