Rust - це мова програмування з строгою типізацією, фокусом на безпечній роботі з пам'яттю, що робить її дуже продуктивною та безпечною. Одним із ключових аспектів при розробці програм на Rust є типи даних. У цій статті ми розглянемо основні типи даних в Rust, як вони використовуються, та деякі особливості, що варто враховувати при їх використанні.
Скалярні типи
У Rust є чотири скалярні типи:
-Ціле число
-Число з рухомою комою
-Булевий тип
-Символьний тип
Ви можете впізнати їх з інших мов програмування.
Цілі типи
Ціле - це число без дробової частини. Таблиці нижче, показують вбудовані цілі типи в Rust. Ми можемо скористатися будь-яким з них для оголошення типу цілого числа.
i - integer, u - unsigned integer
8, 16, 32, 64 - вказує на розмір в бітах
usize та isize — залежить від архітектури системи, тобто вони будуть 32-bit або 64-bit. (Якщо не можете визначити, який розмір типу вам потрібен, то ці типи можуть бути корисними)
Цілі беззнакові:
Тип | Беззнаковий мінімум | Беззнаковий максимум |
---|---|---|
u8 | 0 | 255 |
u16 | 0 | 65,535 |
u32 | 0 | 4,294,967,295 |
u64 | 0 | 18,446,744,073,709,551,615 |
usize | 0 (залежить від архітектури системи) | 18,446,744,073,709,551,615 (залежить від архітектури системи) |
Цілі знакові:
Тип | Знаковий мінімум | Знаковий максимум |
---|---|---|
i8 | -128 | 127 |
i16 | -32,768 | 32,767 |
i32 | -2,147,483,648 | 2,147,483,647 |
i64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
isize | -9,223,372,036,854,775,808 (залежить від архітектури системи) | -9,223,372,036,854,775,807 (залежить від архітектури системи) |
В цих двох табличках відсутній цілий тип даних i128 та u128 тому, що він має великий діапазон значень і використовується дуже рідко, але прикріплю для повного ознайомлення.
i128 — -170,141,183,460,469,231,731,687,303,715,884,105,728 до 170,141,183,460,469,231,731,687,303,715,884,105,727
u128 — 0 до 340,282,366,920,938,463,463,374,607,431,768,211,455
Як же зрозуміти, який тип цілого використати?
Якщо ви непевні, цілий тип за замовчуванням в Rust - i32, але варто використовувати типи залежно від конкретних потреб вашого коду та зберігати відповідність типів з максимальними розмірами та потребами пам'яті.
Важливо зазначити, що використання правильного типу може мати велике значення для ефективності програми, зокрема, для швидкодії та економії пам'яті. Тому, вибір типу повинен бути обґрунтований і залежати від потреб програми.
Числа з рухомою комою
Також відомі як дробові числа — це числа, які мають дробову частину, що дозволяє представляти дробові значення. Дробова частина зазвичай записується після десяткової крапки або коми.
У Rust для представлення чисел з рухомою комою використовуються типи даних f32 і f64.
f - float
f32 — забезпечує приблизну точність з 7-8 значущими цифрами після коми.
f64 — забезпечує вищу точність з 15-16 значущими цифрами після коми.
За допомогою цього коду, можемо дізнатись максимальне та мінімальне значення:
fn main() {
let float_32_bit_min_value = std::f32::MIN;
println!("The minimal value of f32 is: {}", float_32_bit_min_value);
let float_32_bit_max_value = std::f32::MAX;
println!("The maximal value of f32 is: {}", float_32_bit_max_value);
let float_64_bit_min_value = std::f64::MIN;
println!("The minimal value of f64 is: {}", float_64_bit_min_value);
let float_64_bit_max_value = std::f64::MAX;
println!("The maximal value of f64 is: {}", float_64_bit_max_value);
}
Output:
The minimal value of f32 is: -340282350000000000000000000000000000000
The maximal value of f32 is: 340282350000000000000000000000000000000
The minimal value of f64 is: -179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
The maximal value of f64 is: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Булевий тип
Як і в більшості інших мов програмування, булевий тип у Rust має два можливі значення: true (істина) та false (неправда), позначається bool. Тип даних, який представляє логічні значення.
Булівський тип займає 1 байт.
fn main() {
let t: bool = true;
let f: bool = false;
}
Символьний тип
Символьний тип даних, використовується для зберігання одного символу.Символьний тип даних має розмір 4 байти, або 32 біти, а не 1 байт, як зазвичай буває в інших мовах програмування, позначається char.
fn main() {
let heart_eyed_cat: char = '😻';
}
У більшості мов програмування символи кодуються за допомогою таблиці символів ASCII або Unicode, які надають числові значення для кожного символу. Символом може бути будь-який символ з таблиці символів ASCII або Unicode, такий як букви, цифри, знаки пунктуації, символи пробілу, спеціальні символи тощо.
Чому символьний тип займає 32 бітів а не 16 бітів?
Це пов'язано з тим, що Rust використовує модифікований варіант Unicode під назвою UTF-8. У UTF-8 кожен символ кодується послідовністю з одного або декількох байтів, кількість байтів залежить від величини коду символу. Оскільки в UTF-8 кожен символ може займати від 1 до 4 байтів, то в Rust для зберігання символів використовується 32-бітний тип char, щоб була можливість зберігати будь-який символ Unicode.
Висновок
Важливо пам'ятати, що в Rust типи даних мають строгу типізацію, що дозволяє програмістам створювати безпечний та ефективний код, що забезпечує високу продуктивність та безпеку виконання. Навчитися працювати з типами даних в Rust - це важлива частина вивчення мови та допоможе створювати більш ефективний та безпечний код.