Table of contents
As we dive deeper into the Rust programming language, we encounter two essential concepts that affect how we work with variables: mutability and shadowing. In this beginner-friendly blog, we'll understand these concepts, showing you how they play a crucial role in Rust's safety and flexibility.
Variable Mutability in Rust
In Rust, variables are, by default, immutable. Once you assign a value to a variable, you cannot change it unless you explicitly declare it as mutable using the mut
keyword.
Example of Immutable Variable:
fn main() {
let age = 25; // Immutable variable
age = 30; // Error! Cannot assign to immutable variable.
}
Example of Mutable Variable:
fn main() {
let mut age = 25; // Mutable variable
age = 30; // Valid! Mutable variables can be changed.
}
The use of mutable variables is strictly controlled by Rust's borrow checker, ensuring that multiple parts of your code can't accidentally modify the same data simultaneously. Here is a new keyword borrow checker; for the time being, we will learn more about it in upcoming posts. Just remember that you can't modify a variable's value anyplace in the program if you don't designate it as mutable using mut
keyword.
Shadowing in Rust
Shadowing allows you to redeclare a variable with the same name within the same scope. By shadowing, you can change the variable's value and data type while keeping the same variable name.
Example of Shadowing:
fn main() {
let age = 25; // Original variable
let age = age + 5; // Shadowing with a new value
let age = "thirty"; // Shadowing with a different data type
println!("Age: {}", age); // Output: Age: thirty
}
Shadowing is useful when you want to transform a variable, avoid creating a new variable, or when you need to redefine a variable to comply with specific code requirements.
You've now grasped the fundamental concepts of variable mutability and shadowing in Rust. Embracing immutability by default ensures safer code, while mutable variables enable you to modify data when necessary. Additionally, shadowing empowers you to be more expressive and adapt variables to different scenarios without confusion. Remember to use these features wisely to take full advantage of Rust's reliability and flexibility in your projects. Happy coding with Rust!