注意: 最新版のドキュメントをご覧ください。この第1版ドキュメントは古くなっており、最新情報が反映されていません。リンク先のドキュメントが現在の Rust の最新のドキュメントです。
Rustにおける if の扱いは さほど複雑ではありませんが、伝統的なシステムプログラミング言語のそれと比べて、
動的型付け言語の if により近いものになっています。そのニュアンスをしっかり理解できるように、説明しましょう。
if は より一般的なコンセプトの一つである、「分岐(branch)」の具体的な形です。この名称は、木の枝(branch)に由来します:
決定点はひとつの選択に依存し、複数のパスを取ることができます。
if の場合は、二つのパスを導く ひとつの選択があります。
let x = 5; if x == 5 { println!("x は 5 です!"); }
もし、x を別の値に変更すると、この行は出力されません。よりわかりやすく説明すると、
if のあとにくる式が true に評価された場合、そのブロックが実行されます。また、false の場合は、それは実行されません。
false の場合にも何かをしたい時は、 else を使います:
let x = 5; if x == 5 { println!("x は 5 です!"); } else { println!("x は 5 ではありません :("); }
複数の条件がある時は、 else if を使います:
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 では、その値は常に () になります。