コンテンツにスキップ

Rustのif...else

if を使うと、プログラムに判断をさせることができます。条件によって、あるコードのブロックを実行するか、別のブロックを実行するかを切り替えるのです。

fn main() {
let age = 20;
if age >= 18 {
println!("投票できます");
}
}
▶ 実際に試してみよう

ほかの言語から来た人がつまずきやすいポイントが2つあります。

  • 条件をかっこで囲む必要はありません。if (age >= 18) ではなく if age >= 18 と書きます。
  • 条件は本物の bool でなければなりません。if age(数値)はコンパイルが通りません。if age != 0 のように書く必要があります。
fn main() {
let age = 15;
if age >= 18 {
println!("投票できます");
} else {
println!("まだ投票できる年齢ではありません");
}
}
▶ 実際に試してみよう
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は上から順に条件をチェックして、最初に当てはまったものを実行します。思ったとおりの動きですね。

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 とは書けません。

数値 n = 7 を保存してください。if を式として使い、変数 kind に "偶数" か "奇数" を設定して、7は奇数です と表示しましょう。ヒント:n % 2 == 0 なら偶数です。

解答を見る
fn main() {
let n = 7;
let kind = if n % 2 == 0 { "偶数" } else { "奇数" };
println!("{n}は{kind}です");
}

実行結果:

7は奇数です
▶ 実際に試してみよう

ある映画館の料金は、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 も必要です。

理解度チェック

1. Rustの if の条件に必要なのはどれですか?

2. let と一緒に if を式として使うとき、両方の分岐に求められることは何ですか?

スコア: 0 / 2