Шпаргалка по RustОсновные понятия
-
Переменные и типы данных:
- По умолчанию переменные являются неизменяемыми. Для создания изменяемой переменной используйте
mut
.
let mut x = 5; // изменяемая переменная
x = 10; // корректно
- Основные типы данных:
-
Целые числа:
i32
,
u32
,
i64
,
u64
,
isize
,
usize
.
-
Числа с плавающей точкой:
f32
,
f64
.
-
Логический тип:
bool
.
-
Символ:
char
.
-
Строки:
String
(изменяемая) и
&str
(неизменяемая).
-
Функции:
- Определение функции:
fn имя_функции(параметры: Тип) -> Тип {
// тело функции
}
- Пример функции:
fn add(x: i32, y: i32) -> i32 {
x + y
}
-
Управляющие конструкции:
- Условия:
if условие {
// код
} else if условие {
// код
} else {
// код
}
- Циклы:
-
Цикл `loop`:
loop {
// бесконечный цикл
}
-
Цикл `for`:
for элемент in коллекция {
// код
}
-
Цикл `while`:
while условие {
// код
}
Структуры и перечисления
-
Структуры:
struct ИмяСтруктуры {
поле1: Тип,
поле2: Тип,
}
Пример:
struct Point {
x: i32,
y: i32,
}
-
Перечисления:
enum ИмяПеречисления {
Вариант1,
Вариант2,
}
Пример:
enum Direction {
Up,
Down,
Left,
Right,
}
Введение в владение и заимствование
-
Владение: Каждый ресурс в Rust имеет единственного владельца.
-
Заимствование:
-
Неизменяемое заимствование:
let s = String::from("Hello");
let r = &s; // r — неизменяемая ссылка на s
-
Изменяемое заимствование:
let mut s = String::from("Hello");
let r = &mut s; // r — изменяемая ссылка на s
Обработка ошибок
-
Результат:
enum Result<T, E> {
Ok(T),
Err(E),
}
Пример функции с обработкой ошибок:
fn divide(x: i32, y: i32) -> Result<i32, String> {
if y == 0 {
Err(String::from("Деление на ноль"))
} else {
Ok(x / y)
}
}
-
Паника:
- Используйте
panic!()
для критических ошибок, которые нельзя обработать.
Обобщения
- Обобщенные типы позволяют писать более универсальный код:
fn print_vector<T: std::fmt::Debug>(vec: Vec<T>) {
println!("{:?}", vec);
}
Работа с модулями
-
Создание модуля:
mod имя_модуля {
pub fn функция() {
// код
}
}
-
Импорт модуля:
use имя_модуля::функция;
Стандартные библиотеки
-
Работа с коллекциями:
-
Векторы:
let mut vec = Vec::new();
vec.push(1);
vec.push(2);
-
Хэш-таблицы:
use std::collections::HashMap;
let mut map = HashMap::new();
map.insert("ключ", "значение");
Полезные команды
-
Компиляция и выполнение:
cargo build # Компиляция проекта
cargo run # Запуск проекта
-
Запуск тестов:
cargo test
👉 @rust_lib