📖 Scenario: Imagine you are cooking and following a recipe. Some steps tell you to do something (statements), and some steps give you a value or result (expressions). In Rust, understanding the difference between expressions and statements helps you write clear and correct code.
🎯 Goal: You will create a small Rust program that shows the difference between expressions and statements by assigning values and printing results.
📋 What You'll Learn
Create a variable using a statement
Use an expression to assign a value
Use a block expression to calculate a value
Print the final result
💡 Why This Matters
🌍 Real World
Knowing the difference between expressions and statements helps you write correct and efficient Rust programs, especially when working with complex logic.
💼 Career
Rust developers often need to write concise and clear code. Understanding expressions vs statements is fundamental for debugging and code optimization.
Progress0 / 4 steps
1
Create a variable with a statement
Write a statement to create a variable called x and assign it the value 5.
Rust
Hint
Remember, in Rust, let statements create variables.
2
Assign a value using an expression
Create a variable called y and assign it the value of x + 3 using an expression.
Rust
Hint
Expressions produce a value, like x + 3.
3
Use a block expression to calculate a value
Create a variable called z and assign it the value of a block expression that adds y and 2. The block should be { y + 2 }.
Rust
Hint
Blocks in Rust can be expressions if they return a value.
4
Print the final result
Use println! to print the value of z.
Rust
Hint
Use println!("{}", z); to display the value.
Practice
(1/5)
1. In Rust, which of the following best describes an expression?
easy
A. It calculates a value and returns it.
B. It performs an action but does not return a value.
C. It is used only for declaring variables.
D. It is a comment explaining the code.
Solution
Step 1: Understand what an expression does
An expression in Rust always produces a value when evaluated.
Step 2: Compare with statements
Statements perform actions but do not return values, unlike expressions.
Final Answer:
It calculates a value and returns it. -> Option A
Quick Check:
Expression = returns value [OK]
Hint: Expressions always produce values; statements do not [OK]
Common Mistakes:
Confusing statements with expressions
Thinking expressions do not return values
Assuming all code lines are statements
2. Which of the following is a valid Rust statement?
easy
A. let x = 5;
B. 5 + 3
C. x * 2
D. println!("Hello")
Solution
Step 1: Identify statements vs expressions
Statements perform actions and often end with a semicolon, like variable declarations.
Step 2: Check each option
let x = 5; declares a variable and ends with a semicolon, so it's a statement. Options A and C are expressions without semicolons. println!("Hello") is a macro call but without a semicolon, so it's an expression.
Final Answer:
let x = 5; -> Option A
Quick Check:
Statements end with semicolon [OK]
Hint: Statements usually end with semicolons [OK]
Common Mistakes:
Missing semicolon for statements
Confusing macro calls without semicolon as statements
Thinking expressions are statements
3. What is the output of this Rust code?
fn main() {
let x = 3;
let y = {
let z = x + 2;
z * 2
};
println!("{}", y);
}
medium
A. 8
B. 10
C. 7
D. Compilation error
Solution
Step 1: Evaluate the inner block expression
Inside the block, z = x + 2 = 3 + 2 = 5, then the block returns z * 2 = 5 * 2 = 10.
Step 2: Assign and print the value
Variable y gets the value 10, which is printed by println!.
Final Answer:
10 -> Option B
Quick Check:
Block expression returns 10 [OK]
Hint: Blocks return last expression value without semicolon [OK]
Common Mistakes:
Assuming block returns unit () due to semicolon confusion
Miscomputing z or y values
Thinking println! returns a value
4. Identify the error in this Rust code snippet:
fn main() {
let x = 5;
let y = if x > 3 {
x + 1;
} else {
x - 1
};
println!("{}", y);
}
medium
A. Variable x is not initialized
B. Missing semicolon after if expression
C. The if block returns unit type, causing a type mismatch
D. println! macro is used incorrectly
Solution
Step 1: Analyze the if expression branches
The if branch has x + 1; with a semicolon, making it a statement returning unit (). The else branch returns x - 1 without semicolon, an expression returning i32.
Step 2: Understand type mismatch
Because branches return different types (unit vs i32), Rust reports a type mismatch error for y.
Final Answer:
The if block returns unit type, causing a type mismatch -> Option C
Quick Check:
If branches must return same type [OK]
Hint: Remove semicolon in if branch to return value [OK]
Common Mistakes:
Adding semicolon after expressions in if branches
Ignoring type mismatch errors
Assuming println! causes error
5. You want to assign a variable result to the value of a block that adds 2 to n only if n is positive, otherwise returns 0. Which code correctly uses expressions and statements?
hard
A. let result = if n > 0 { n + 2 } else { 0 };
B. let result = if n > 0 { n + 2; } else { 0; };
C. let result = if n > 0 { n + 2 } else { println!("Zero") };
D. let result = { if n > 0 { n + 2 } else { 0 } };
Solution
Step 1: Check if expressions return values
Options A and D both return values correctly. let result = if n > 0 { n + 2; } else { 0; }; has semicolons inside if branches, making them statements returning unit (). let result = if n > 0 { n + 2 } else { println!("Zero") };'s else branch calls println! which returns unit (), causing type mismatch.
Step 2: Compare A and D
let result = if n > 0 { n + 2 } else { 0 }; assigns directly from if expression. let result = { if n > 0 { n + 2 } else { 0 } }; wraps the if expression inside a block, which is also an expression returning the if's value. Both are valid, but let result = { if n > 0 { n + 2 } else { 0 } }; explicitly shows block expression usage.
Final Answer:
let result = { if n > 0 { n + 2 } else { 0 } }; -> Option D
Quick Check:
Block expression returns if expression value [OK]
Hint: Use blocks or if expressions without semicolons for values [OK]
Common Mistakes:
Adding semicolons inside if branches
Mixing expressions with statements causing type errors
Using println! where a value is expected
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.