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

Затенение переменных в Rust

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

Затенение (variable shadowing)
#

Затенение переменных - это концепция Rust, которая позволяет повторно объявить переменную. Оригинальная переменная заменяется новой, что позволяет создавать новую переменную с тем же именем, прописывая ее название после ключевого слова let. При этом старая переменная перестает существовать и будет затенена новой переменной.

Давайте рассмотрим на примере, как это работает.

Пример использования затенения
#

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

let temperature = "25.5"; // данные с датчика температуры строкового типа

Мы хотим преобразовать строковое значение температуры в число с плавающей точкой, чтобы выполнить некоторые вычисления.

let temperature = "25.5";
let temperature: f64 = temperature.parse().unwrap(); // преобразуем строку в f64

Теперь мы можем использовать переменную temperature для вычислений.

Если мы захотим изменить единицу измерения температуры с градусов Цельсия на градусы Фаренгейта, мы можем сделать это следующим образом:

let temperature = "25.5";
let temperature: f64 = temperature.parse().unwrap();
let temperature = temperature * 9.0 / 5.0 + 32.0; // преобразуем градусы Цельсия в градусы Фаренгейта

Таким образом, мы можем повторно использовать имя переменной temperature для хранения разных значений и типов данных.

Изменяемость переменных
#

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

let temperature = "25.5";
let temperature: f64 = temperature.parse().unwrap();
let mut temperature = temperature * 9.0 / 5.0 + 32.0;
temperature = temperature + 1.0; //теперь можем изменить значение переменной
Переменная-константа, объявленная при помощи ключевого слова const, не может быть затенена. Компилятор выведет ошибку E0308 - mismatched types.

Затенение в рамках области видимости (scope)
#

Язык Rust позволяет создавать области видимости, которые могут захватывать значения переменных, объявленных до самой области видимости и очищать их из стека, когда покидается область видимости.

Рассмотрим пример:

let brightness = "50"; 
    1

{ 
    2

    let brightness: u8 = brightness.parse().unwrap(); 
    println!("Brightness level is {brightness}%");
    let brightness = brightness + 20; 
    3

    println!("New brightness level is {brightness}%"); 
    4

}
println!("Original brightness value is {brightness}");  
    5

Вывод компилятора будет следующим:

Brightness level is 50%
New brightness level is 70%
Original brightness value is 50

Давайте разберём все подробно 🔎

  • На строке 1 мы объявили переменную brightness со строковым значением “50”.
  • Внутри блока 2 мы объявили новую переменную brightness с типом u8 и числовым значением 50 после преобразования parse.
  • Затем мы увеличили уровень яркости 3 на 20 и вывели новое значение 4 .
  • После выхода из блока значение переменной brightness снова стало “50”, как и было ранее. 5

Вот так элегантно и эффективно мы преобразовывали и выводили значение температуры, не используя никакие костыли в виде новых переменных.

Надеюсь, эта статья помогла вам понять концепцию затенения переменных в Rust и избавит вас от придумывания новых имен для переменных наподобии upd_temperature.

Я в своей практике напридумывал таких приличное количество.

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

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

Переменные в Rust: основы и примеры использования
303 слов·2 минут· loading · loading
Rust Dev
Разбираемся с ошибками в Rust
392 слов·2 минут· loading · loading
Rust Dev
Изменяемые и неизменяемые переменные в Rust
419 слов·2 минут· loading · loading
Rust Dev