注意: 最新版のドキュメントをご覧ください。この第1版ドキュメントは古くなっており、最新情報が反映されていません。リンク先のドキュメントが現在の Rust の最新のドキュメントです。
Rustにおける if
の扱いはさほど複雑ではありませんが、伝統的なシステムプログラミング言語のそれに比べて、
動的型付け言語でみられる if
にずっと近いものになっています。そのニュアンスをしっかり理解できるよう、
さっそく説明していきましょう。
if
は一般化されたコンセプト、「分岐(branch)」の特別な形式です。この名前は木の枝(branch)を由来とし:
取りうる複数のパスから、選択の決定を行うポイントを表します。
if
の場合は、続く2つのパスから1つを選択します。
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
では、その値は常に ()
となります。