Variables are used to store the type data in a memory location.
How to declare a variable in Rust?
Here is a syntax for variable declaration in Rust.
let variable=value // type annotation without type
let variable:datatype=value // with type declaration
the variable is the name of a variable datatype is an valid Rust DataType value is any valid literal in Rust.
In the Next section, Let’s see the rules and conventions for naming a variable.
Here is an example
fn main() {
let name = "John";
let id: u8 = 20;
println!("{} - {}", id, name)
}
Rust variable naming conventions
Following are naming conventions for variable names
Variable Name is a combination of letters, digits, and underscore(_) character
Variable names start with letters and digits only, numbers are not allowed
keywords and identifiers in Rust are not used as a variable name
Local variables follow snake_case conventions, for example, employee_name.
Variable names are case sensitive, which means upper case and lower case names are different.
In the first line, the data type is not declared, the compiler is inferred from the value.
immutable variables
Variables in Rust are immutable by default, which means, that once the variable is assigned with value, Its value will never be changed.
fn main() {
let number = 2;
number = 20;
println!("{}", number)
}
It throws a compilation error[E0384]: cannot assign twice to immutable variable `number``
How to declare mutable variables
Variables declared with the mut
keyword are mutable variables.
These variables can be changed its value multiple times, reassign with new values
fn main() {
let mut number = 2;
number = 20;
println!("{}", number)
}
How to declare a variable without value?
It is possible to declare a variable first and assign the value later.
This variable is declared with type, but not initialized with value in the declaration. Next line, assign the variable with a value.
fn main() {
let age: u8;
age = 123;
println!("{}", age);
}
Rust Variable Scoping
scope of a variable is how the variable is visible and accessible in a code.
Rust follows lexical scoping in which a variable is accessible inside a block on which it is declared. There are two types of scopes
- Global scopes: variables declared in the main function are called global scopes
- Local scopes: variables declared inside a function or block have a local scope.
We have inner blocks and outer blocks on which scope is bound to {}
.
Variables declared in the outer scope are accessible to the inner scope. But inner scope variables are not accessible in the outer scope
fn main() {
let age = 25;
{
let id = 2;
println!("age - {} | id - {}", age, id);
}
}
Rust variable shadowing
Shadowing makes variables change their value and type.
One variable is declared and assigned with a type, You can reassign it with a new type, and its value In the below example, the variable name is declared of type &str. Reassigned this variable with a new type of value. Here is a valid code
fn main() {
let name = "John";
println!("{}", name);
let name=123;
println!("{}", name);
}
How to declare multiple variables of different types?
We can declare multiple variables of the same or different types.
multiple variables are declared with comma-separated enclosed in ()
.
values also placed by comma separator enclosed in ()
.
In this example, multiple variables are declared with bool, number, and string and initialized with different values in the declaration.
Here is an example program
fn main() {
let (first, second, third) = (false, 25, "John");
println!("first: {} | second : {} | third = {}", first, second, third);
}
Output:
first: false | second : 25 | third = John