Mutability and Shadowing in Rust
Nick Scialli
April 19, 2021
New — Check out my free newsletter on how the web works!
Mutability and shadowing are foundational concepts for learning Rust. Let’s review them and their use cases.
Mutability
Mutability is the ability to change a variable. In Rust, variables are immutable by default. In other words, you cannot do the following:
fn main() {
let age = 25;
println!("I am {} years old.", age);
age = 26;
println!("Now I am {}.", age);
}
The Rust compiler will yell at you when you try to change age
to 26
because age
is not mutable.
Making a Variable Mutable
There’s a quick fix for this—the mut
keyword. We can let the Rust compiler affirmatively know that we plan on mutating age
like this:
fn main() {
let mut age = 25;
println!("I am {} years old.", age);
age = 26;
println!("Now I am {}.", age);
}
And our program now compiles and we get the following output:
I am 25 years old.
Now I am 26.
Shadowing
The idea of shadowing is a bit different. Usually we use shadowing when we want to change the type of a variable. Consider the following code, which will currently not compile:
fn main() {
let mut age = 9;
println!("I am {} years old.", age);
age = "ten";
println!("Now I am {}.", age);
}
The Rust compiler will not compile the code and will complain that "ten"
is not an integer. So even if age
is mutable, we’re still not allowed to change its type.
Shadowing a Variable
We can shadow the age
variable by reusing the let
keyword. In this use case, we don’t even need age
to be mutable. Let’s see how this works:
fn main() {
let age = 9;
println!("I am {} years old.", age);
let age = "ten";
println!("Now I am {}.", age);
}
This now compiles and we see the following output:
I am 9 years old.
Now I am ten.
By shadowing (i.e., reusing the let
keyword), we can repurpose our age
variable as a string and the compiler is happy.
🎓 Learn how the web works
One of the best ways to level up your tech career is to have a great foundational understanding of how the web works. In my free newsletter, How the Web Works, I provide simple, bite-sized explanations for various web topics that can help you boost your knowledge. Join 2,500+ other learners on the newsletter today!
Signing up is free, I never spam, and you can unsubscribe any time. You won't regret it!
Sign up for the newsletter »Nick Scialli is a senior UI engineer at Microsoft.