Rustのif...else
if を使うと、プログラムに判断をさせることができます。条件によって、あるコードのブロックを実行するか、別のブロックを実行するかを切り替えるのです。
基本の if
Section titled “基本の if”fn main() { let age = 20;
if age >= 18 { println!("投票できます"); }}ほかの言語から来た人がつまずきやすいポイントが2つあります。
- 条件をかっこで囲む必要はありません。
if (age >= 18)ではなくif age >= 18と書きます。 - 条件は本物の
boolでなければなりません。if age(数値)はコンパイルが通りません。if age != 0のように書く必要があります。
if / else
Section titled “if / else”fn main() { let age = 15;
if age >= 18 { println!("投票できます"); } else { println!("まだ投票できる年齢ではありません"); }}else if で分岐を増やす
Section titled “else if で分岐を増やす”fn main() { let score = 72;
if score >= 90 { println!("成績: A"); } else if score >= 75 { println!("成績: B"); } else if score >= 60 { println!("成績: C"); } else { println!("成績: F"); }}Rustは上から順に条件をチェックして、最初に当てはまったものを実行します。思ったとおりの動きですね。
if を式として使う
Section titled “if を式として使う”Rustには、多くの言語にはない特徴があります。if が値を返せるのです。つまり、let の右側に if を書けます。
fn main() { let age = 20; let status = if age >= 18 { "大人" } else { "未成年" };
println!("{status}");}これは、関数から値を返すときと同じしくみです。それぞれの分岐で、値のあとにセミコロンを付けません。ひとつだけ条件があります。両方の分岐が同じ型の値を返さなければなりません(ここではどちらも &str です)。
入れ子にせず、条件を組み合わせる
Section titled “入れ子にせず、条件を組み合わせる”if の中に別の if を書くこともできます。それでも動きますが、2段、3段と深くなると読みにくくなります。多くの場合、代わりに論理演算子の &&(かつ)と ||(または)で条件をつなげられます。
fn main() { let temperature = 22; let is_raining = false;
// 入れ子:動くけれど、どんどん右にずれていく if temperature > 15 { if !is_raining { println!("入れ子:散歩に行こう"); } }
// 同じチェックを1つの条件で if temperature > 15 && !is_raining { println!("組み合わせ:散歩に行こう"); }
// || はどちらか一方が true なら true if temperature < 0 || temperature > 35 { println!("家にいよう"); } else { println!("いい天気だね"); }}実行結果:
入れ子:散歩に行こう組み合わせ:散歩に行こういい天気だね内側のブロックで追加の処理をするときや、内側に独自の else があるときは、入れ子にする意味があります。でも、外側の if が内側を守るためだけにあるなら、&& を使ったほうが同じことをシンプルに書けます。数値がある範囲に入っているかを調べるときは、temperature >= 15 && temperature <= 25 と書きます。Rustでは 15 <= temperature <= 25 とは書けません。
1. 偶数か奇数か
Section titled “1. 偶数か奇数か”数値 n = 7 を保存してください。if を式として使い、変数 kind に "偶数" か "奇数" を設定して、7は奇数です と表示しましょう。ヒント:n % 2 == 0 なら偶数です。
解答を見る
fn main() { let n = 7; let kind = if n % 2 == 0 { "偶数" } else { "奇数" }; println!("{n}は{kind}です");}実行結果:
7は奇数です2. チケットの料金
Section titled “2. チケットの料金”ある映画館の料金は、12歳未満の子どもが 5 ドル、65歳以上が 7 ドル、それ以外の人は 12 ドルです。age を 70 として保存し、if / else if / else の式1つで price を求めて、チケット: 7ドル と表示してください。ヒント:どの分岐も数値を返す必要があります。そして、if 全体は最後の } のあとにセミコロンを付けて終わります。
解答を見る
fn main() { let age = 70;
let price = if age < 12 { 5 } else if age >= 65 { 7 } else { 12 };
println!("チケット: {price}ドル");}実行結果:
チケット: 7ドルif 条件 { ... }と書きます。かっこは不要で、条件はboolでなければなりません。else ifでチェックを増やし、elseで残りの場合を受け止めます。ifの中にifを入れ子にする代わりに、&&と||で条件をつなげましょう。ifは式として値を返すことができます。両方の分岐の型をそろえる必要があり、elseも必要です。
理解度チェック
Section titled “理解度チェック”理解度チェック
1. Rustの if の条件に必要なのはどれですか?
2. let と一緒に if を式として使うとき、両方の分岐に求められることは何ですか?
スコア: 0 / 2
さらに詳しく
Section titled “さらに詳しく”- 制御フロー — The Rust Programming Language 日本語版:「if式」の節で、
if、else if、そしてletの中でifを使う方法を公式に解説しています。 - if/else — Rust by Example 日本語版:分岐が値を返す様子がわかる、実行できる例です。
- If expressions — The Rust Reference(英語):正確なルールです。細かいところまで知りたくなったときにどうぞ。
- Exercism の Rust トラック(英語):メンターのサポート付きで無料で取り組める練習問題です。最初のほうの問題では、
ifとelseをたくさん使います。