Перейти к основному содержимому
Модуль 1 · Урок 2 из 22/14 в курсе~10 min
Уроки модуля (2/2)

Примитивные типы

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

Примитивные типы в Rust делятся на две основные категории: скаляры (одиночное значение) и составные (группа значений).

Скалярные типы

Скалярные типы представляют одно значение. В Rust есть четыре фундаментальных скалярных типа:

  1. Целые: целые числа. Они могут быть подписаны (i8, i16, i32, i64, i128, isize) или без знака (u8, u16, u32, u64, u128, usize). Тип по умолчанию — i32.
  2. С плавающей запятой: числа с десятичной точкой. Это могут быть f32 или f64 (двойная точность, по умолчанию).
  3. Булевы значения: представляют логическую истину с помощью true или false (тип bool).
  4. Символы: одно скалярное значение Юникода, заключенное в одинарные кавычки (тип char), например 'a', 'ℤ' или эмодзи '😻'.

Пример явной аннотации типа:

Rust
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';

Типы соединений

Составные типы могут группировать несколько значений в один тип. В Rust есть два основных примитивных составных типа:

Кортежи

Кортеж группирует значения разных типов в коллекцию фиксированного размера:

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;

Массивы (списки фиксированного размера)

Массив группирует несколько элементов одного типа в коллекцию фиксированного размера, хранящуюся в стеке:

Rust
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])

Попробуйте сами

Упражнение#rust.m1.l2.e1
Попыток: 0Загрузка…

Объявите кортеж с именем stats, содержащий возраст 30 (целое число) и оценку 95,5 (число с плавающей запятой). Затем выведите результат на экран, обратившись напрямую ко второму элементу кортежа по его индексу.

Загрузка редактора…
Показать подсказку

Создайте кортеж с помощью `let stats = (30, 95.5);`. Получите доступ ко второму элементу, используя `stats.1` внутри макроса `println!`.

Решение доступно после 3 попыток

Упражнение#rust.m1.l2.e2
Попыток: 0Загрузка…

Объявите массив с именем Numbers, содержащий целочисленные значения от 1 до 5. Выведите третий элемент массива (индекс 2) на экран с помощью println!.

Загрузка редактора…
Показать подсказку

Объявите массив с помощью `let Numbers = [1, 2, 3, 4, 5];` и получите доступ к третьему элементу, проиндексировав его с помощью `[2]`.

Решение доступно после 3 попыток

Упражнение#rust.m1.l2.e3
Попыток: 0Загрузка…

Учитывая кортеж `let point = (10, 20);`, используйте деструктуризацию, чтобы извлечь значения в две переменные с именами `x` и `y`. Затем выведите сумму `x` и `y`.

Загрузка редактора…
Показать подсказку

Используйте синтаксис `let (x, y) = point;`, чтобы деструктурировать кортеж, а затем суммировать переменные в `println!`.

Решение доступно после 3 попыток