導入
条件で処理を分けるのが if です。Rust の if は式なので、その結果を変数に代入できます。三項演算子(? :)が Rust にないのは、if 自体が値を返せるからです。
説明
fn main() {
let n = 7;
if n % 2 == 0 {
println!("偶数");
} else if n % 3 == 0 {
println!("3の倍数");
} else {
println!("その他");
}
// if は式。結果を変数に代入できる
let label = if n % 2 == 0 { "偶数" } else { "奇数" };
println!("{n} は {label}");
}
- 条件式に丸カッコは不要(
if (n > 0)ではなくif n > 0)。一方、ブロックの{ }は必須です。 - 条件は必ず
bool型でなければなりません。C言語のように「0以外を真」とは扱いません。if n { ... }(nが整数)はエラーです。 let label = if ... { "偶数" } else { "奇数" };…ifが値を返すので代入できます。このとき、if側とelse側の型は揃っている必要があります。
条件が bool に限定されているおかげで、「代入 = と比較 == を書き間違えて意図せず真になる」といった典型的なバグが起きません。
試すには
let label = if n % 2 == 0 { "偶数" } else { 0 }; のように if 側と else 側で型を変えると、「型が一致しない」とコンパイルエラーになります。式として値を返す以上、両方の型が揃う必要があるわけです。