# Изменяемые (mut) и неизменяемые переменные в Rust: иммутабельность по умолчанию

> Почему переменные в Rust неизменяемы по умолчанию и как работает ключевое слово mut. Разбираем гарантии безопасности памяти и приращение производительности.

- **URL:** https://eagle2000.space/rust/rust-var-mut/
- **Date:** 2025-05-06

- **Tags:** rust, dev

---## Введение
В Rust все переменные по умолчанию иммутабельные (Immutable), то есть они не могут изменяться. Мутабельные переменные, напротив, имеют способность изменяться (Mutable).


## Обещание себе

Давайте рассмотрим пример. Предположим, вы решили вставать в 6 утра каждый день и ложиться в 22:00. Для этого вы создаете две переменные. Вы хотите вывести значения этих переменных в консоль, а затем изменить их.


### 💻 Изменяемые и неизменяемые переменные в Rust


#### Шаг 1

```rust
// ?compile_fail
fn main() {
    let get_up = 6;
    let bedtime = 22;
    println!("Я планирую вставать в {} часов и ложиться спать в {}", get_up, bedtime);

    get_up = 7; // ❌ Ошибка компиляции: get_up неизменяема
    bedtime = 23;
}
```

**Попытка изменить неизменяемую переменную**
- В Rust переменные по умолчанию неизменяемы (immutable).
- Этот код приведёт к ошибке компиляции E0384.


#### Шаг 2

```rust
fn main() {
    let mut get_up = 6;
    let mut bedtime = 22;
    println!("Я планирую вставать в {} часов и ложиться спать в {}", get_up, bedtime);

    get_up = 7; // ✅ Корректно: переменные помечены как `mut`
    bedtime = 23;

    println!("Я планирую вставать в {} часов и ложиться спать в {}", get_up, bedtime);
}
```

**Использование ключевого слова mut**
- Чтобы сделать переменную изменяемой, добавьте `mut` после `let`.
- Теперь значения переменных можно безопасно переопределять.


## Анализ ошибки

Компилятор сообщает, что вы пытаетесь присвоить новое значение неизменяемой переменной (`cannot assign twice to immutable variable`). В Rust переменные по умолчанию неизменяемые (иммутабельные).

## Исправление ошибки

Rust предлагает решение: сделать вашу переменную мутабельной, добавив ключевое слово `mut` после `let`. Как вы видите на втором шаге интерактивного примера выше, после добавления `mut` программа успешно выполняется и обновляет значения в соответствии с вашим новым графиком.

## Итоги

Rust — язык со строгими правилами. Он требует от разработчика определяться с тем, будут ли его переменные изменяемыми или нет. По умолчанию все переменные объявленные при помощи ключевого слова `let` являются иммутабельными (неизменяемыми). Чтобы сделать переменную изменяемой, нужно добавить ключевое слово `mut` после `let`. Это помогает писать более безопасный и предсказуемый код (создатели языка Rust нас именно в этом стараются убедить).
