Immutabilité et Ombrage
Immutabilité par défaut
Une variable est immutable par défaut, c’est-à-dire qu’une fois liée à une valeur, cette dernière ne peut pas être changée:
fn main() {
let x = 5;
println!("The value of x is: {x}");
//x = 6; // Ce code est invalide
//println!("The value of x is: {x}");
}
Ainsi, pour qu’il soit valide, ce code doit être réécrit ainsi (noter le
mot-clef mut):
fn main() {
let mut x = 5;
println!("The value of x is: {x}");
x = 6; // Ce code est valide
println!("The value of x is: {x}");
}
Ombrage
L’ombrage (shadowing) consiste à lier une nouvelle variable avec le même nom afin de modifier sa valeur:
fn main() {
let x = 5;
println!("The value of x is: {x}");
let x = x + 1;
println!("The value of x is: {x}");
}
La portée (scope) d’une variable liée est limitée à son bloc de définition et aux blocs enfants, à partir de l’endroit où elle est déclarée:
fn main() {
let x = 5; // x_1
let x = x + 1; // x_2 = x_1 + 1
{
let x = x * 2; // x_3 = x_2 * 2
println!("The value of x in the inner scope is: {x}"); // x_3
}
println!("The value of x is: {x}"); // x_2
}
On peut changer le type d’une variable:
fn main() {
let spaces = " ";
let spaces = spaces.len();
println!("{} spaces", spaces);
}
On ne peut pas changer le type d’une variable mutable:
fn main() {
let mut spaces = " ";
// spaces = spaces.len(); // faux !
println!("{} spaces", spaces);
}
Constantes
Une constante est déclarée avec le mot-clef const et doit être typée. La
valeur d’une constante doit être calculable au moment de la compilation du code.
La portée d’une constante est identique à celle d’une variable.
const SECONDS_IN_ONE_HOUR: u32 = 60 * 60;
const THREE_HOURS_IN_SECONDS: u32 = SECONDS_IN_ONE_HOUR * 3;
fn main() {
println!("There are {} seconds in 3 hours.", THREE_HOURS_IN_SECONDS);
}