blog.dopana

Back

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#

loopbreakするまで繰り返します:

let mut counter = 0;
let result = loop {
    counter += 1;
    if counter == 10 {
        break counter * 2;   // break後の値が結果になる
    }
};
println!("{result}");   // 20
rust

while#

let mut n = 3;
while n > 0 {
    println!("{n}");
    n -= 1;
}
rust

範囲を使ったfor#

範囲に対するforが慣用的な反復方法です:

for i in 0..5 {
    println!("{i}");
}
rust

0..5は末尾を含みません。0..=5は末尾を含みます。コレクションも反復できます:

let names = ["Ada", "Grace", "Linus"];
for name in names {
    println!("{name}");
}
rust

breakとcontinue#

  • breakはループを即座に抜けます。
  • continueは現在の反復の残りをスキップします。
for i in 0..10 {
    if i % 2 == 0 {
        continue;
    }
    if i > 7 {
        break;
    }
    println!("{i}");
}
// 出力: 1 3 5 7
rust

結論#

Rustの制御フローは表現力豊かで安全です。truthy/falsyの驚きはなく、分岐が値を生成できます。シリーズ次回は関数です。

参考文献#