Типы данных в Rust
Базовые типы данных в языке Rust следующие.
Integer
Целочисленные типы называют целыми. В зависимости от разрядности и наличия знака они делятся на следующие категории:
| Разрядность | Знаковый | Беззнаковый |
|---|---|---|
| 8-битный | i8 | u8 |
| 16-битный | i16 | u16 |
| 32-битный | i32 | u32 |
| 64-битный | i64 | u64 |
| 128-битный | i128 | u128 |
| arch | isize | usize |
Целочисленные типы isize и usize используются для измерения размеров данных. Их разрядность зависит от целевой платформы, на которой они выполняются. Если это процессор с 32-битной архитектурой, будет использоваться 32-битная длина целого числа.
Существует несколько способов представления целых чисел:
| Система счисления | Пример |
|---|---|
| Decimal | 98_222 |
| Шестнадцатеричная | 0xff |
| Восьмеричная | 0o77 |
| Binary | 0b1111_0000 |
| Byte (может представлять только тип u8) | b'A' |
Очевидно, некоторые целые числа содержат подчёркивание в середине. Такая запись помогает людям легче оценить значение числа при вводе очень больших чисел.
Числа с плавающей запятой
Как и другие языки, Rust поддерживает 32-битные числа с плавающей запятой (f32) и 64-битные числа с плавающей запятой (f64). По умолчанию 64.0 будет представлять 64-битное число с плавающей запятой, потому что современные компьютерные процессоры выполняют оба типа вычислений с плавающей запятой почти с одинаковой скоростью, но 64-битные числа с плавающей запятой имеют более высокую точность.
Пример
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
Математические операции
Покажем математические операции на примере программы:
Пример
let sum = 5 + 10; // Сложение
let difference = 95.5 - 4.3; // Вычитание
let product = 4 * 30; // Умножение
let quotient = 56.7 / 32.2; // Деление
let remainder = 43 % 5; // Остаток
}
Добавление знака = после многих операторов означает операцию над самим значением, например:
sum += 1Эквивалентноsum = sum + 1。
Примечание:Rust не поддерживает++и--, потому что когда эти два оператора появляются перед переменной или после неё, они влияют на читаемость кода и снижают осведомлённость разработчика об изменениях переменной.
Boolean
Логический тип представлен bool, и его значение может быть только true или false.
Символ
Символьный тип представлен char.
Тип char в Rust имеет размер 4 байта и представляет скалярное значение Unicode. Это означает, что он может поддерживать неанглийские символы, такие как китайские, японские и корейские символы. Даже эмодзи и пробелы нулевой ширины являются допустимыми значениями char в Rust.
Значения Unicode находятся в диапазоне от U+0000 до U+D7FF и от U+E000 до U+10FFFF (включительно). Однако в Unicode не существует понятия «символ», поэтому ваше интуитивное представление о том, что такое «символ», может не совпадать с понятием символа в Rust. Поэтому обычно рекомендуется использовать строки для хранения текста UTF-8 (неанглийские символы должны по возможности находиться в строках).
Примечание:Поскольку существует две кодировки китайского текста (GBK и UTF-8), использование китайских строк в программировании может привести к появлению искажённых символов. Это связано с тем, что исходная программа и командная строка имеют несовместимые кодировки текста. Поэтому в Rust и строки, и символы должны использовать кодировку UTF-8, иначе компилятор выдаст ошибку.
Составные типы
Кортеж использует пару( )круглых скобок, чтобы заключить набор данных, который может содержать данные разных типов:
Пример
// tup.0 равно 500
// tup.1 равно 6.4
// tup.2 равно 1
let (x, y, z) = tup;
// y равно 6.4
Массив использует пару[ ]скобок, чтобы заключать данные одного и того же типа.
Пример
// a — целочисленный массив длиной 5
let b = ["January", "February", "March"];
// b — массив строк длиной 3
let c: [i32; 5] = [1, 2, 3, 4, 5];
// c — массив i32 длиной 5
let d = [3; 5];
// Эквивалентно let d = [3, 3, 3, 3, 3];
let first = a[0];
let second = a[1];
// Доступ к массиву
a[0] = 123; // Ошибка: массив a не является изменяемым
let mut a = [1, 2, 3];
a[0] = 4; // Верно