Уроки модуля (2/2)
Примитивные типы
Rust — это статически типизированный язык, что означает, что он должен знать тип всех переменных во время компиляции. Обычно компилятор может определить тип на основе присвоенного значения, но иногда необходимо или полезно указать его вручную.
Примитивные типы в Rust делятся на две основные категории: скаляры (одиночное значение) и составные (группа значений).
Скалярные типы
Скалярные типы представляют одно значение. В Rust есть четыре фундаментальных скалярных типа:
- Целые: целые числа. Они могут быть подписаны (
i8,i16,i32,i64,i128,isize) или без знака (u8,u16,u32,u64,u128,usize). Тип по умолчанию —i32. - С плавающей запятой: числа с десятичной точкой. Это могут быть
f32илиf64(двойная точность, по умолчанию). - Булевы значения: представляют логическую истину с помощью
trueилиfalse(типbool). - Символы: одно скалярное значение Юникода, заключенное в одинарные кавычки (тип
char), например'a','ℤ'или эмодзи'😻'.
Пример явной аннотации типа:
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';Типы соединений
Составные типы могут группировать несколько значений в один тип. В Rust есть два основных примитивных составных типа:
Кортежи
Кортеж группирует значения разных типов в коллекцию фиксированного размера:
let person: (String, i32) = (String::from("Alice"), 30);
// Destructuring to extract values
let (name, age) = person;
// Direct access with index using dot (.)
let name_direct = person.0;
let age_direct = person.1;Массивы (списки фиксированного размера)
Массив группирует несколько элементов одного типа в коллекцию фиксированного размера, хранящуюся в стеке:
let numbers = [1, 2, 3, 4, 5]; // Inferred as [i32; 5]
let first = numbers[0]; // Access by index
let third = numbers[2];Если вы попытаетесь получить доступ к индексу за пределами границ массива (например, numbers[10]), Rust немедленно вылетит (паникует) во время выполнения вместо того, чтобы разрешить несанкционированный доступ к памяти.
Сравнение
| Особенность | Кортеж | Массив |
|---|---|---|
| Типы элементов | Может быть разным | Должно быть то же самое |
| Размер | Исправлено | Исправлено |
| Доступ | Индекс через точку (например, .0) | Квадратные скобки (например, [0]) |
Попробуйте сами
Объявите кортеж с именем stats, содержащий возраст 30 (целое число) и оценку 95,5 (число с плавающей запятой). Затем выведите результат на экран, обратившись напрямую ко второму элементу кортежа по его индексу.
Показать подсказку
Создайте кортеж с помощью `let stats = (30, 95.5);`. Получите доступ ко второму элементу, используя `stats.1` внутри макроса `println!`.
Решение доступно после 3 попыток
Объявите массив с именем Numbers, содержащий целочисленные значения от 1 до 5. Выведите третий элемент массива (индекс 2) на экран с помощью println!.
Показать подсказку
Объявите массив с помощью `let Numbers = [1, 2, 3, 4, 5];` и получите доступ к третьему элементу, проиндексировав его с помощью `[2]`.
Решение доступно после 3 попыток
Учитывая кортеж `let point = (10, 20);`, используйте деструктуризацию, чтобы извлечь значения в две переменные с именами `x` и `y`. Затем выведите сумму `x` и `y`.
Показать подсказку
Используйте синтаксис `let (x, y) = point;`, чтобы деструктурировать кортеж, а затем суммировать переменные в `println!`.
Решение доступно после 3 попыток