Rust’s take on if
is not particularly complex, but it’s much more like the if
you’ll find in a dynamically typed language than in a more traditional systems language. So let’s talk about it, to make sure you grasp the nuances.
if
is a specific form of a more general concept, the ‘branch’, whose name comes from a branch in a tree: a decision point, where depending on a choice, multiple paths can be taken.
In the case of if
, there is one choice that leads down two paths:
# #![allow(unused_variables)] #fn main() { let x = 5; if x == 5 { println!("x is five!"); } #}
If we changed the value of x
to something else, this line would not print. More specifically, if the expression after the if
evaluates to true
, then the block is executed. If it’s false
, then it is not.
If you want something to happen in the false
case, use an else
:
# #![allow(unused_variables)] #fn main() { let x = 5; if x == 5 { println!("x is five!"); } else { println!("x is not five :("); } #}
If there is more than one case, use an else if
:
# #![allow(unused_variables)] #fn main() { let x = 5; if x == 5 { println!("x is five!"); } else if x == 6 { println!("x is six!"); } else { println!("x is not five or six :("); } #}
This is all pretty standard. However, you can also do this:
# #![allow(unused_variables)] #fn main() { let x = 5; let y = if x == 5 { 10 } else { 15 }; // y: i32 #}
Which we can (and probably should) write like this:
# #![allow(unused_variables)] #fn main() { let x = 5; let y = if x == 5 { 10 } else { 15 }; // y: i32 #}
This works because if
is an expression. The value of the expression is the value of the last expression in whichever branch was chosen. An if
without an else
always results in ()
as the value.
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/book/first-edition/if.html