Типи даних в Rust (part 1)

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 - це важлива частина вивчення мови та допоможе створювати більш ефективний та безпечний код.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Denys Skobalo
Denys Skobalo@deuxnids

282Прочитань
3Автори
14Читачі
На Друкарні з 16 квітня

Більше від автора

  • Про мій шлях в програмуванні

    Завжди мав інтерес до комп'ютерів ще з дитинства. В 2018 році я дізнався що таке програмування, і я вирішую розпочати свій шлях.

    Теми цього довгочиту:

    Програмування

Вам також сподобається

  • УКРАЇНСЬКИЙ ІНТЕРНЕТ ЯК ЗОНА НЕДОСЯЖНОСТІ

    Під українським тут і далі ми будемо розуміти український за мовою, а не географічно. Сайт узагалі є явищем екстериторіальним, і, скажімо, нема нічого дивного, якщо місце перебування власника та відвідувачів сайту, його мова та доменне ім'я зовсім не пов'язані між собою.

    Теми цього довгочиту:

    Інтернет
  • Spring Statemachine

    Пост про Spring Statemachine. Глосарій. Моніторинг. Безпека. Детальний розбір прикладу комплексної машини станів.

    Теми цього довгочиту:

    Java
  • Пайтон: дескриптори - що це???

    Можливо, навіть далеко не всі чули, що таке дескриптори, але точно всі використовували їхЯ кажу це так впевнено, оскільки @property є дескриптором

    Теми цього довгочиту:

    Програмування

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається

  • УКРАЇНСЬКИЙ ІНТЕРНЕТ ЯК ЗОНА НЕДОСЯЖНОСТІ

    Під українським тут і далі ми будемо розуміти український за мовою, а не географічно. Сайт узагалі є явищем екстериторіальним, і, скажімо, нема нічого дивного, якщо місце перебування власника та відвідувачів сайту, його мова та доменне ім'я зовсім не пов'язані між собою.

    Теми цього довгочиту:

    Інтернет
  • Spring Statemachine

    Пост про Spring Statemachine. Глосарій. Моніторинг. Безпека. Детальний розбір прикладу комплексної машини станів.

    Теми цього довгочиту:

    Java
  • Пайтон: дескриптори - що це???

    Можливо, навіть далеко не всі чули, що таке дескриптори, але точно всі використовували їхЯ кажу це так впевнено, оскільки @property є дескриптором

    Теми цього довгочиту:

    Програмування