注意: 最新版のドキュメントをご覧ください。この第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
では、その値は常に ()
になります。