Типы данных в 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-битные числа с плавающей запятой имеют более высокую точность.

Пример

fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

Математические операции

Покажем математические операции на примере программы:

Пример

fn main() {
    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, иначе компилятор выдаст ошибку.

Составные типы

Кортеж использует пару( )круглых скобок, чтобы заключить набор данных, который может содержать данные разных типов:

Пример

let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 равно 500
// tup.1 равно 6.4
// tup.2 равно 1
let (x, y, z) = tup;
// y равно 6.4

Массив использует пару[ ]скобок, чтобы заключать данные одного и того же типа.

Пример

let a = [1, 2, 3, 4, 5];
// 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; // Верно
Другие расширения