# 🎯 Definição > [!Abstract] Definição > O **Sombreamento (Shadowing)** é um recurso do Rust que permite declarar uma nova variável com o mesmo nome de uma variável anterior. A segunda variável "sombreia" a primeira, o que significa que o compilador passará a usar o segundo nome até que ele próprio seja sombreado ou o escopo termine. # 📝 Notas ## 1. Como funciona Diferente de apenas alterar o valor de uma variável mutável, o sombreamento cria uma **nova variável** usando a palavra-chave `let`. ```rust fn main() { let x = 5; let x = x + 1; // A primeira variável x é sombreada pela nova declaração println!("O valor de x é: {x}"); // Resultado: 6 } ``` ## 2. Shadowing vs Mutabilidade (`mut`) Existe uma diferença fundamental entre sombrear uma variável e marcá-la como mutável: | Característica | Shadowing (`let`) | Mutabilidade (`mut`) | | :--- | :--- | :--- | | **Tipo de Dado** | Pode ser alterado | Deve permanecer o mesmo | | **Re-declaração** | Exige o uso de `let` | Apenas atribuição (`=`) | | **Estado Final** | A variável pode voltar a ser imutável | A variável permanece mutável | > [!Tip] Vantagem do Shadowing > É ideal para transformações de dados onde você não quer criar nomes complexos como `espacos_str` e `espacos_int`. ```rust // Exemplo de mudança de tipo com Shadowing let espacos = " "; // Tipo: &str let espacos = espacos.len(); // Tipo: usize (Válido!) // Com mut, isso causaria erro: // let mut espacos = " "; // espacos = espacos.len(); // ERRO: tipos incompatíveis ``` ## 3. Comportamento de Escopo O sombreamento respeita os blocos de código `{ }`. Uma variável sombreada dentro de um escopo interno deixa de existir quando esse escopo termina. ```rust fn main() { let x = 5; { let x = x * 2; // Sombreia o x externo apenas neste bloco println!("Valor no escopo interno: {x}"); // 10 } println!("Valor no escopo externo: {x}"); // 5 } ``` # 🔗 Conceitos relacionados - [[Variáveis em Rust]] - [[Tipos de dados em Rust]] - [[Escopo de variáveis no Rust]] # 📚 Referências - [Variables and Mutability - The Rust Programming Language](https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html) - [4: Variable Shadowing in Rust - YouTube](https://www.youtube.com/watch?v=JpbI7ULFwiw&t=3s)