# 🎯 Definição
> [!Abstract] Definição
> Em Rust, variáveis são espaços nomeados na memória para armazenar dados. O diferencial fundamental da linguagem é que **variáveis são imutáveis por padrão**. Essa escolha de design visa garantir segurança de memória e facilitar a concorrência.
# 📝 Notas
## 1. Imutabilidade e `let`
Por padrão, uma vez que um valor é atribuído a um nome, ele não pode ser alterado.
```rust
fn main() {
let x = 5;
// x = 6; // Isso causaria um erro de compilação!
println!("O valor de x é: {x}");
}
```
## 2. Mutabilidade com `mut`
Para permitir que um valor mude, deve-se usar explicitamente a palavra-chave `mut`.
```rust
fn main() {
let mut y = 10;
println!("Valor inicial: {y}");
y = 12; // Permitido pois y é mutável
println!("Valor alterado: {y}");
}
```
## 3. Constantes (`const`)
Diferente de variáveis imutáveis, constantes:
- Devem ter o tipo anotado explicitamente.
- Podem ser declaradas em qualquer escopo (inclusive global).
- São definidas em tempo de compilação.
```rust
const SEGUNDOS_EM_UM_MINUTO: u32 = 60;
const GLOBAL_VAR: &str = "Constante Global";
```
## 4. Shadowing (Sombreamento)
Rust permite declarar uma nova variável com o mesmo nome de uma variável anterior. A segunda variável "sombreia" a primeira.
> [!TIP] Vantagem do Shadowing
> Permite transformar um valor (ex: mudar o tipo de uma String para um número) mantendo o mesmo nome, sem precisar marcar a variável como `mut`.
```rust
fn main() {
let espacos = " "; // Tipo: &str
let espacos = espacos.len(); // Tipo: usize (Shadowing)
println!("Quantidade de espaços: {espacos}");
}
```
# 🔗 Conceitos relacionados
- [[Tipos de dados em Rust]]
- [[Escopo de variáveis no Rust]]
# 📚 Referências
- [3: Creating variables in Rust - YouTube](https://www.youtube.com/watch?v=j7npg1YOwkM)
- [Variables and Mutability - The Rust Programming Language](https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html)