Branching on a condition
Branching on a condition is done with a common if, if else, or if else if else construct, as in this example:
// from Chapter 3/code/ifelse.rs fn main() { let dead = false; let health = 48; if dead { println!("Game over!"); return; } if dead { println!("Game over!"); return; } else { println!("You still have a chance to win!"); } if health >= 50 { println!("Continue to fight!"); } else if health >= 20 { println!("Stop the battle and gain strength!"); } else { println!("Hide and try to recover!"); } }
This gives the following output:
You still have a chance to win! Stop the battle and gain strength!
The condition after the if statement has to be a Boolean. However, unlike in C, the condition must not be enclosed in parentheses. Code blocks surrounded by { } (curly braces) are needed after the if, else, or else if statement. The first example also shows that we can get out of a function with the return value.
Also the if else condition is an expression that returns a value. This value can be used as a function call parameter in a print! statement, or it can be assigned in a let binding, like this:
let active = if health >= 50 { true }else{ false }; println!("Am I active? {}", active);
This prints the following output:
Am I active? false
The code blocks could contain many lines, but be careful: when returning a value, you must omit the; (semi-colon) after the last expression in the if or else block (see section Expressions in Chapter 2, Using Variables and Types). Moreover, all branches always must return a value of the same type.
This also alleviates the need for a ternary operator (?: ), like in C++; simply use if, as follows:
let adult = true; let age = if adult { "+18" } else { "-18" }; println!("Age is {}", age); //
This gives the following output:
Age is +18
- See code in Chapter 3/exercises/iftest.rs.
- Try adding a; (semi-colon) after the +18 and -18 values, like this {"+18";}, what value will be printed for the variable age? What happens if you type annotate the variable age as &str?
- See if you can omit the { } (curly braces) if there is only one statement in the block.
- Also, verify if this code is OK:
let health = -3;
let result = if health <=0 { "Game over man!" };
How would you correct this statement if necessary?--by using pattern matching, which we will examine in the next chapter, also branches code, but does so based on the value of a variable.