Шпаргалка по Rust
Страница для быстрой справки: то, что хочется проверить, не перечитывая целый урок. Каждый раздел ссылается на страницу, где всё объясняется как следует.
Ключевые слова
Заголовок раздела «Ключевые слова»| Ключевое слово | Значение |
|---|---|
let |
Объявить переменную (Переменные) |
mut |
Сделать переменную или ссылку изменяемой (Переменные) |
const |
Объявить константу (Переменные) |
fn |
Объявить функцию (Функции) |
struct |
Объявить структуру (Структуры) |
enum |
Объявить перечисление (Перечисления) |
impl |
Добавить методы типу (Структуры, Трейты) |
trait |
Объявить трейт (Трейты) |
match |
Сопоставить значение с образцами (Match) |
if let / while let |
Сопоставить с одним образцом (if let и while let) |
loop / while / for |
Три вида циклов (Циклы, Цикл while, Цикл for) |
break / continue |
Управлять циклом (Break и continue) |
mod |
Объявить модуль (Модули) |
pub |
Сделать элемент видимым за пределами модуля (Модули) |
use |
Ввести путь в область видимости (Модули) |
unsafe |
Открыть доступ к сырым указателям и другим операциям, за которые отвечаешь ты сам (Unsafe) |
move |
Заставить замыкание забрать владение захваченными значениями (Многопоточность) |
& / &mut |
Заимствовать / изменяемо заимствовать значение (Заимствование) |
Частые методы String
Заголовок раздела «Частые методы String»| Метод | Что делает |
|---|---|
.len() |
Длина в байтах (кириллическая буква занимает 2 байта) |
.trim() |
Убирает пробелы в начале и в конце |
.to_uppercase() / .to_lowercase() |
Меняет регистр |
.contains(pat) |
Есть ли подстрока или шаблон |
.replace(from, to) |
Заменяет все совпадения |
.push_str(s) |
Добавляет &str в конец |
.push(c) |
Добавляет один char в конец |
.chars() |
Перебирает строку по символам |
.split(pat) |
Делит строку, возвращает итератор подстрок |
.parse::<T>() |
Превращает текст в другой тип (возвращает Result) |
Подробности и примеры — в уроке Строки.
Частые методы Vec
Заголовок раздела «Частые методы Vec»| Метод | Что делает |
|---|---|
.push(x) |
Добавляет в конец |
.pop() |
Удаляет и возвращает последний элемент (Option) |
.remove(i) |
Удаляет элемент с индексом i |
.len() |
Количество элементов |
.is_empty() |
Пуст ли вектор |
.get(i) |
Безопасный доступ по индексу (Option, без паники) |
.iter() |
Перебирает элементы по ссылке |
.contains(&x) |
Есть ли такое значение |
.sort() |
Сортирует на месте |
.sort_by_key(|x| ...) |
Сортирует по полю или вычисленному ключу |
.dedup() |
Удаляет идущие подряд дубликаты (сначала отсортируй) |
Подробности и примеры — в уроках Векторы, Сортировка и поиск и Итераторы.
Какую коллекцию выбрать?
Заголовок раздела «Какую коллекцию выбрать?»| Тип | Используй, когда нужно… |
|---|---|
Vec<T> |
Упорядоченный список, который может расти |
HashMap<K, V> |
Быстро находить значение по ключу |
HashSet<T> |
Уникальные элементы и быстрая проверка «есть ли он здесь?» |
BTreeMap<K, V> |
Пары ключ-значение, отсортированные по ключу |
VecDeque<T> |
Очередь — добавлять и забирать с обоих концов |
Подробности и примеры — в уроках HashMap и HashSet и BTreeMap.
Option и Result
Заголовок раздела «Option и Result»| Метод | Для чего | Что делает |
|---|---|---|
.unwrap() |
Оба | Достаёт значение, паникует при None/Err |
.expect("msg") |
Оба | Как .unwrap(), но со своим сообщением паники |
.unwrap_or(default) |
Оба | Достаёт значение или запасной вариант |
.is_some() / .is_none() |
Option |
Проверяет, какой это вариант |
.is_ok() / .is_err() |
Result |
Проверяет, какой это вариант |
? |
Оба | Досрочно возвращает None/Err |
Подробности и примеры — в уроках Option и Result.
Форматирование (println!, format!)
Заголовок раздела «Форматирование (println!, format!)»| Спецификатор | Что выводит |
|---|---|
{} |
Обычный вывод (нужен трейт Display) |
{:?} |
Отладочный формат (Debug) |
{:#?} |
Отладочный формат с красивыми отступами |
{:.2} |
2 знака после запятой |
{:5} |
Дополняет до ширины 5 |
{name} |
Подставляет переменную с именем name |
Подробности и примеры — в уроке Вывод на экран.
Команды Cargo
Заголовок раздела «Команды Cargo»| Команда | Что делает |
|---|---|
cargo new name |
Создаёт новый проект |
cargo run |
Собирает и запускает |
cargo check |
Быстро ищет ошибки, не собирая программу |
cargo test |
Запускает тесты |
cargo add crate |
Добавляет зависимость |
cargo fmt |
Форматирует код |
cargo clippy |
Ищет в коде частые ошибки (линтер) |
cargo build --release |
Собирает оптимизированный исполняемый файл |
Подробности и примеры — в уроке Cargo и крейты.
Диапазоны
Заголовок раздела «Диапазоны»| Синтаксис | Значение |
|---|---|
1..5 |
От 1 до 5, не включая 5 |
1..=5 |
От 1 до 5 включительно |
..3 |
С начала до 3, не включая 3 |
2.. |
От 2 до конца |
.. |
Всё целиком |
Подробности и примеры — в уроках Цикл for и Срезы.
Популярные крейты
Заголовок раздела «Популярные крейты»| Что нужно… | Крейт | Урок |
|---|---|---|
| JSON (и другие форматы) | serde + serde_json |
JSON и Serde |
| Асинхронный код, таймеры, сеть | tokio |
Async/Await |
| Интерфейс командной строки | clap |
CLI-утилита на clap |
| Простая обработка ошибок | anyhow, thiserror |
anyhow и thiserror |
| Случайные числа | rand |
Случайные числа |
| Регулярные выражения | regex |
Регулярные выражения |
| Дата и время | chrono |
Дата и время |
| Логирование | log + env_logger, tracing |
Логирование |
| Веб-сервер | axum |
Веб-API на Axum |
Любой из них добавляется командой cargo add <крейт>. Как выбрать хороший крейт, рассказано в уроке Cargo и крейты.
Что почитать
Заголовок раздела «Что почитать»- Rust Language Cheat Sheet — cheats.rs (на английском): гораздо более подробная справка на одной странице, от синтаксиса до размещения в памяти, — когда захочется больше деталей.
- Приложение B: Операторы и символы — книга «Язык программирования Rust» (перевод на русский): все операторы и символы Rust и что они означают.
- std::fmt — документация стандартной библиотеки (на английском): полный синтаксис форматирования в
println!иformat!: ширина, заполнение, точность и многое другое. - Cargo Commands — The Cargo Book (на английском): все команды
cargoи их параметры. - Стандартная библиотека Rust (на английском): полная документация API для
String,Vec,Option,Resultи всего остального. Пользуйся полем поиска наверху.