Перейти к основному содержимому
  1. Rust/

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

419 слов·2 минут· loading · loading · ·
Rust Dev
Оглавление
about-rust - Эта статья часть цикла.
Часть 5: Эта статья

Введение
#

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

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

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

let get_up = 6;
let bedtime = 22;

Вы можете вывести значения этих переменных в консоль с помощью println! (см. Работа с println! и интерполяцией строк в Rust)

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

Все хорошо, программа работает. Однако, через несколько дней вы решаете, что пока рано делать такие резкие изменения и хотите дать себе поблажку на час. Вы пытаетесь изменить значения переменных:

get_up = 7;
bedtime = 23;

Ошибка
#

И снова выводите план в консоль. Но компилятор Rust не дает вам этого сделать! Давайте рассмотрим сообщение об ошибке:

error[E0384]: cannot assign twice to immutable variable `get_up` 
    1

 --> src/main.rs:7:1
  |
2 | let get_up = 6; 
    2

  |     ------ first assignment to `get_up`
...
7 | get_up = 7; 
    3

  | ^^^^^^^^^^ cannot assign twice to immutable variable
  |
help: consider making this binding mutable 
  |
2 | let mut get_up = 6; 
    4

  |     +++

Компилятор сообщает, что вы пытаетесь присвоить новое значение неизменяемой переменной 1 . В Rust переменные по умолчанию иммутабельные. Первая строка 2 ошибки указывает на место, где вы впервые присвоили значение переменной, а вторая строка 3 указывает на место, где вы пытаетесь присвоить новое значение.

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

Rust предлагает решение: сделать вашу переменную мутабельной, добавив ключевое слово mut после let 4 . Давайте последуем этому совету и изменим код:

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

    get_up = 7;
    bedtime = 23;

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

Программа теперь работает успешно, и вывод соответствует ожиданиям. А у вас все еще есть возможность вернуться к изначальному плану 😉

Standard Output
Я планирую вставать в 6 часов и ложиться спать в 22
Я планирую вставать в 7 часов и ложиться спать в 23

Итоги
#

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

about-rust - Эта статья часть цикла.
Часть 5: Эта статья

Связанные статьи

Hash Map в Rust
733 слов·4 минут· loading · loading
Rust Dev
Rust императивный и функциональный, а также о методе collect
1030 слов·5 минут· loading · loading
Rust Dev
Pattern matсhing
606 слов·3 минут· loading · loading
Rust Dev