if

Rustにおける if の扱いは さほど複雑ではありませんが、伝統的なシステムプログラミング言語のそれと比べて、 動的型付け言語の if により近いものになっています。そのニュアンスをしっかり理解できるように、説明しましょう。

if は より一般的なコンセプトの一つである、「分岐(branch)」の具体的な形です。この名称は、木の枝(branch)に由来します: 決定点はひとつの選択に依存し、複数のパスを取ることができます。

if の場合は、二つのパスを導く ひとつの選択があります。

fn main() { let x = 5; if x == 5 { // println!("x is five!"); println!("x は 5 です!"); } }
let x = 5;

if x == 5 {
    println!("x は 5 です!");
}

もし、x を別の値に変更すると、この行は出力されません。よりわかりやすく説明すると、 if のあとにくる式が true に評価された場合、そのブロックが実行されます。また、false の場合は、それは実行されません。

false の場合にも何かをしたい時は、 else を使います:

fn main() { let x = 5; if x == 5 { // println!("x is five!"); println!("x は 5 です!"); } else { // println!("x is not five :("); println!("x は 5 ではありません :("); } }
let x = 5;

if x == 5 {
    println!("x は 5 です!");
} else {
    println!("x は 5 ではありません :(");
}

複数の条件がある時は、 else if を使います:

fn main() { let x = 5; if x == 5 { // println!("x is five!"); println!("x は 5 です!"); } else if x == 6 { // println!("x is six!"); println!("x は 6 です!"); } else { // println!("x is not five or six :("); println!("x は 5 でも 6 でもありません :("); } }
let x = 5;

if x == 5 {
    println!("x は 5 です!");
} else if x == 6 {
    println!("x は 6 です!");
} else {
    println!("x は 5 でも 6 でもありません :(");
}

これは当然なことですが、次のように書くこともできます:

fn main() { let x = 5; let y = if x == 5 { 10 } else { 15 }; // y: i32 }
let x = 5;

let y = if x == 5 {
    10
} else {
    15
}; // y: i32

また、次のように書くのがほとんどの場合良いでしょう:

fn main() { let x = 5; let y = if x == 5 { 10 } else { 15 }; // y: i32 }
let x = 5;

let y = if x == 5 { 10 } else { 15 }; // y: i32

これが出来るのは if が式だからです。その式の値は、選択された条件の最後の式の値です。 else のない if では、その値は常に () になります。