Найти в Дзене

Переменные, типы данных и вывод типов в Rust

Rust — это современный язык программирования, который сочетает высокую производительность с безопасностью памяти. Одной из ключевых особенностей Rust является строгая статическая типизация, которая помогает предотвратить множество ошибок на этапе компиляции. В этой статье мы рассмотрим работу с переменными, основные типы данных (скалярные и составные), а также механизм вывода типов. В Rust переменные объявляются с помощью ключевого слова let. По умолчанию переменные неизменяемые (immutable), что способствует безопасности данных: let x = 5; // Неизменяемая переменная // x = 10; // Ошибка: нельзя изменить неизменяемую переменную Для создания изменяемой переменной используется ключевое слово `mut`: let mut y = 10; y = 20; // Корректно, так как y объявлена как изменяемая Rust позволяет "затенять" переменные, объявляя новую переменную с тем же именем: let z = 5; let z = z + 1; // Новая переменная z = 6 let z = "теперь строка"; // Тип переменной изменен на &str Затенение полезно для преобраз
Оглавление

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

1. Переменные в Rust

1.1 Объявление переменных

В Rust переменные объявляются с помощью ключевого слова let. По умолчанию переменные неизменяемые (immutable), что способствует безопасности данных:

let x = 5; // Неизменяемая переменная
// x = 10; // Ошибка: нельзя изменить неизменяемую переменную

Для создания изменяемой переменной используется ключевое слово `mut`:

let mut y = 10;
y = 20; // Корректно, так как y объявлена как изменяемая

1.2 Затенение (Shadowing)

Rust позволяет "затенять" переменные, объявляя новую переменную с тем же именем:

let z = 5;
let z = z + 1; // Новая переменная z = 6
let z = "теперь строка"; // Тип переменной изменен на &str

Затенение полезно для преобразования значений без создания новых имен.

2. Скалярные типы данных

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

2.1 Целочисленные типы

Rust предоставляет целые числа разных размеров и знаков:

- Знаковые: i8, i16, i32 (по умолчанию), i64, i128, isize.

- Беззнаковые: u8, u16, u32, u64, u128, usize.

Примеры:

let a: i32 = -42; // Знаковое 32-битное число
let b: u8 = 255; // Беззнаковое 8-битное число

2.2 Числа с плавающей точкой

Поддерживаются типы f32 и f64 (по умолчанию):

let c = 3.14; // f64
let d: f32 = 2.718; // f32

2.3 Логический тип

Тип bool имеет два значения: true и false:

let is_valid: bool = true;

2.4 Символьный тип

Тип char представляет Unicode-символ и занимает 4 байта:

let emoji: char = '🚀';

3. Составные типы данных

Составные типы группируют несколько значений. Базовыми в Rust являются кортежи и массивы.

3.1 Кортежи (Tuples)

Кортежи позволяют хранить значения разных типов фиксированной длины:

let tuple: (i32, f64, char) = (42, 3.14, 'R');

Доступ к элементам:

let first = tuple.0; // 42
let (x, y, z) = tuple; // Деструктуризация

3.2 Массивы (Arrays)

Массивы хранят элементы одного типа фиксированного размера:

let arr: [i32; 3] = [1, 2, 3];
let zeros = [0; 5]; // [0, 0, 0, 0, 0]

Доступ по индексу:

let first = arr[0]; // 1

4. Вывод типов

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

4.1 Примеры вывода

let x = 5; // Выводится как i32
let y = 3.14; // Выводится как f64
let z = vec![1, 2, 3]; // Vec<i32>

4.2 Вывод в функциях

Компилятор анализирует контекст использования переменных. Например:

let numbers = vec![1, 2, 3];
let doubled: Vec<_> = numbers.iter().map(|x| x * 2).collect();
// Тип x выводится как &i32, результат коллекции — Vec<i32>

4.3 Когда требуется явная аннотация

В некоторых случаях вывод невозможен. Например:

let parsed: i32 = "42".parse().expect("Не число!"); // Тип результата parse() нужно указать явно.

5. Заключение

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

- Неизменяемость переменных по умолчанию.

- Четкое разделение целочисленных и вещественных типов.

- Использование кортежей и массивов для группировки данных.

- Мощный вывод типов, работающий в большинстве сценариев.

Эти концепции формируют основу для работы с данными в Rust и способствуют созданию надежных приложений.

Подписывайтесь:

Телеграм https://t.me/lets_go_code
Канал "Просто о программировании"
https://dzen.ru/lets_go_code