Модульні уроки (1/2)
Змінні та мінливість
У Rust керування змінними та пам’яттю ґрунтується на двох основних принципах: безпека та контроль. З цієї причини, на відміну від багатьох інших мов програмування, змінні в Rust є незмінними за замовчуванням.
Це означає, що як тільки змінній присвоєно значення, його неможливо змінити. Якщо ви спробуєте його змінити, компілятор викличе помилку.
Незмінні змінні та ключове слово mut
Щоб оголосити змінну, ми використовуємо ключове слово let:
let x = 5; // Immutable by default
// x = 6; // ERROR! The compiler will refuse to build this code.Якщо вам потрібно змінити значення змінної, ви повинні явно зробити її змінною за допомогою ключового слова mut одразу після let:
let mut y = 10; // Mutable
println!("Il valore di y e: {}", y);
y = 15; // Valid!
println!("Il valore modificato di y e: {}", y);Використання префікса mut чітко повідомляє компілятору та всім, хто читає код, що значення зміниться під час виконання.
Затінення
Rust також допускає концепцію затінення, яка є повторним оголошенням змінної з такою самою назвою за допомогою ключового слова let. Нова змінна "затінює" (або покриває) попередню:
let x = 5;
let x = x + 1; // Shadowing: x is now 6
let x = x * 2; // Shadowing: x is now 12На відміну від mut, затінення дозволяє:
- Змініть тип даних змінної, зберігаючи те саме ім’я.
- Підтримувати незмінність змінної після перетворень.
let spaces = " "; // Type: &str (string)
let spaces = spaces.len(); // Type: usize (number)Корисність затінення та областей
Затінення не обмежується одним і тим же блоком; його можна використовувати у вкладених блоках ({}), щоб тимчасово замінити значення. Коли внутрішній блок закінчується, вихідна змінна знову стає видимою:
let x = 5;
{
let x = x * 2; // Shadowing valid only inside the block
println!("Value in the inner block: {}", x); // Prints 10
}
println!("Value in the outer block: {}", x); // Prints 5Цей механізм є надзвичайно безпечним і ефективним, оскільки він відбувається повністю під час компіляції, забезпечуючи безпеку типу без будь-яких накладних витрат на продуктивність під час виконання.
Спробуйте самі
Оголошіть змінну змінну з іменем x із початковим значенням 5. Потім додайте 10 до x і виведіть її на екран за допомогою println! макрос.
Показати підказку
Оголошіть змінну за допомогою `let mut x = 5;`, потім збільште її за допомогою `x += 10;` (або `x = x + 10;`) і, нарешті, надрукуйте її за допомогою `println!('{}', x);`.
Рішення доступне після 3 спроб
Оголошіть незмінну змінну y зі значенням 10. Затініть y, оголосивши її знову за допомогою дозволу, щоб помножити її попереднє значення на 2, і, нарешті, надрукуйте її за допомогою println!.
Показати підказку
Use `let y = 10;`, then shadow it by declaring it again with `let y = y * 2;` and finally use `println!` to display it.
Рішення доступне після 3 спроб
Declare an immutable variable named input containing the string value "42". Shadow input by declaring it as an integer of type i32, converting the original value via input.parse::<i32>().unwrap(). Finally, print it using the println! macro.
Показати підказку
Declare `let input = "42";`, then shadow it with `let input: i32 = input.parse().unwrap();` and print it using `println!("{}", input);`.
Рішення доступне після 3 спроб