Iniciante Fundamentos
Shadowing
Shadowing é quando você declara uma nova variável com o mesmo nome de outra usando let. A nova “sombreia” a anterior. É diferente de mutabilidade.
Exemplo básico
fn main() {
let x = 5;
let x = x + 1; // novo x = 6
let x = x * 2; // novo x = 12
println!("{}", x); // 12
}
Mudar o tipo
Como cada let cria uma variável nova, você pode mudar o tipo, algo que mut não permite:
fn main() {
let espacos = " "; // &str
let espacos = espacos.len(); // usize
println!("{}", espacos); // 3
}
Shadowing vs mut
- Com
mut, o tipo continua o mesmo e o valor muda. - Com shadowing, você cria uma variável nova e pode mudar o tipo.
fn main() {
let mut contador = 0;
contador = 10; // mesmo tipo, ok
let valor = "10";
let valor: i32 = valor.parse().unwrap(); // shadowing muda o tipo
println!("{} {}", contador, valor);
}
Escopo
A sombra vale só dentro do bloco onde foi criada.
fn main() {
let n = 1;
{
let n = n + 10;
println!("Interno: {}", n); // 11
}
println!("Externo: {}", n); // 1
}