Содержание курса
Модуль 1. Знакомство с Rust
7 уроков
1.
Что такое Rust и какую проблему он решает
↗
2.
Безопасность памяти без сборщика мусора: интуиция на пальцах
↗
3.
Где Rust применяют и почему его любят инженеры
↗
4.
Чем Rust отличается от Python, C и Java простыми словами
↗
5.
Как устроено обучение в этом курсе и что ты будешь уметь в конце
↗
6.
Компилятор-друг: почему Rust ругается заранее, а не в проде
↗
7.
Настрой на успех: как не бояться ошибок компилятора
↗
Модуль 2. Установка и первый проект
7 уроков
1.
Устанавливаем rustup: менеджер версий Rust
↗
2.
Что такое cargo и почему это твой главный инструмент
↗
3.
Проверяем установку: rustc --version и cargo --version
↗
4.
Создаём первый проект командой cargo new
↗
5.
Что внутри проекта: Cargo.toml, src/main.rs, target
↗
6.
cargo run, cargo build и cargo check: в чём разница
↗
7.
Debug и release сборки: быстрый старт и быстрая программа
↗
Модуль 3. Первая программа и вывод на экран
7 уроков
1.
Разбираем hello world строчка за строчкой
↗
2.
Функция main: точка входа в программу
↗
3.
Макрос println! и почему у него восклицательный знак
↗
4.
Плейсхолдеры {} и подстановка значений
↗
5.
print! против println!: перевод строки
↗
6.
Форматирование: {:?} для отладки и именованные аргументы
↗
7.
eprintln! и вывод в поток ошибок
↗
Модуль 4. Переменные и неизменяемость
7 уроков
1.
let: создаём переменную
↗
2.
Почему в Rust переменные неизменяемы по умолчанию
↗
3.
Ключевое слово mut: разрешаем изменение
↗
4.
Затенение (shadowing): то же имя, новое значение
↗
5.
Затенение против mut: когда что выбирать
↗
6.
Константы const и чем они отличаются от let
↗
7.
Области видимости: блоки {} и время жизни переменной
↗
Модуль 5. Скалярные типы данных
8 уроков
1.
Целые числа: i32, u32 и семейство знаковых и беззнаковых
↗
2.
Как выбрать размер целого и что значат биты
↗
3.
Переполнение целых: паника в debug и что делать
↗
4.
Числа с плавающей точкой: f64 и f32
↗
5.
Арифметика и приоритет операций
↗
6.
Логический тип bool: true и false
↗
7.
Символьный тип char: это не байт, а Unicode
↗
8.
Литералы и разделители: 1_000_000, 0xff, суффиксы типов
↗
Модуль 6. Составные типы: кортежи и массивы
7 уроков
1.
Кортеж: складываем разные типы в одну упаковку
↗
2.
Доступ к элементам кортежа по индексу .0 .1
↗
3.
Деструктуризация кортежа через let
↗
4.
Пустой кортеж (): тип «ничего»
↗
5.
Массив: фиксированный набор одинаковых элементов
↗
6.
Индексация массива и выход за границы
↗
7.
Инициализация массива значением по умолчанию [0; 5]
↗
Модуль 7. Функции
8 уроков
1.
Объявляем функцию с fn и вызываем её
↗
2.
Параметры функции и их типы
↗
3.
Возврат значения и тип результата
↗
4.
Выражения против инструкций: главное различие Rust
↗
5.
Неявный возврат: последнее выражение без точки с запятой
↗
6.
return для раннего выхода из функции
↗
7.
Комментарии: // и /* */ для заметок и объяснений
↗
8.
Документирующие комментарии /// на будущее
↗
Модуль 8. Ветвление
7 уроков
1.
if: делаем что-то по условию
↗
2.
else и else if: развилки на несколько путей
↗
3.
Условие обязано быть bool: никаких неявных истинностей
↗
4.
if как выражение: присваиваем результат в let
↗
5.
Сравнения и логические операторы && || !
↗
6.
Вложенные условия и как не запутаться
↗
7.
Ранний возврат вместо глубокой вложенности
↗
Модуль 9. Циклы
7 уроков
1.
loop: бесконечный цикл и зачем он нужен
↗
2.
break: выходим из цикла
↗
3.
continue: пропускаем шаг
↗
4.
break со значением: loop, который что-то возвращает
↗
5.
while: цикл с условием
↗
6.
for и диапазоны: самый частый цикл в Rust
↗
7.
Метки циклов 'outer: управляем вложенными циклами
↗
Модуль 10. Владение — сердце Rust
8 уроков
1.
Зачем нужно владение: память без утечек и без сборщика
↗
2.
Стек и куча простыми словами
↗
3.
Правила владения: у каждого значения один хозяин
↗
4.
Перемещение (move): передали значение — потеряли старое
↗
5.
Почему после move старая переменная недоступна
↗
6.
Владение и функции: значение уезжает в функцию
↗
7.
Возврат владения из функции
↗
8.
Drop на пальцах: как Rust сам убирает за собой
↗
Модуль 11. Copy и Clone
7 уроков
1.
Проблема: почему числа ведут себя не как строки
↗
2.
Трейт Copy: дешёвые типы копируются сами
↗
3.
Какие типы являются Copy, а какие нет
↗
4.
Clone: осознанная глубокая копия
↗
5.
Когда .clone() оправдан, а когда это костыль
↗
6.
Copy против Clone: как выбрать и не бояться
↗
7.
Копирование в реальных примерах кода
↗
Модуль 12. Заимствование и ссылки
7 уроков
1.
Ссылка &: одалживаем значение вместо передачи
↗
2.
Заимствование в функциях: работаем без потери владения
↗
3.
Изменяемая ссылка &mut: одалживаем с правом менять
↗
4.
Правило одной изменяемой ссылки
↗
5.
Нельзя смешивать &mut и & одновременно: почему
↗
6.
Висячие ссылки: почему компилятор их не пропустит
↗
7.
Разыменование * простыми словами
↗
Модуль 13. Срезы, String и &str
7 уроков
1.
Срез: ссылка на часть коллекции
↗
2.
Строковые срезы &str: окно в строку
↗
3.
String против &str: владелец и заимствование
↗
4.
Создание строк: String::new, to_string, String::from
↗
5.
Литерал строки — это &str
↗
6.
Передача строк в функции: брать &str, а не String
↗
7.
Срезы массивов &[T]
↗
Модуль 14. Структуры
8 уроков
1.
Зачем нужны структуры: свои типы под задачу
↗
2.
Определяем структуру с полями
↗
3.
Создаём экземпляр и читаем поля
↗
4.
Изменяемые экземпляры и обновление полей
↗
5.
Сокращённая инициализация полей и синтаксис ..
↗
6.
Кортежные структуры и unit-структуры
↗
7.
Дерив #[derive(Debug)] и печать структуры
↗
8.
Владение внутри структур: храним свои данные
↗
Модуль 15. Методы и associated-функции
7 уроков
1.
Блок impl: добавляем поведение к структуре
↗
2.
Первый метод и приёмник &self
↗
3.
&mut self: методы, которые меняют структуру
↗
4.
self без ссылки: метод забирает владение
↗
5.
Ассоциированные функции и конструктор new
↗
6.
Несколько impl-блоков и организация кода
↗
7.
Цепочки вызовов методов
↗
Модуль 16. Перечисления и сопоставление с образцом
8 уроков
1.
enum: тип с несколькими вариантами
↗
2.
Варианты с данными внутри
↗
3.
match: главный инструмент разбора перечислений
↗
4.
Обязательная полнота match и заглушка _
↗
5.
Привязка данных в ветках match
↗
6.
if let: короткий match для одного случая
↗
7.
while let: цикл, пока образец совпадает
↗
8.
Методы для перечислений через impl
↗
Модуль 17. Option — отсутствие значения
7 уроков
1.
Проблема null и как Rust её решает
↗
2.
Тип Option: Some и None
↗
3.
Разбор Option через match
↗
4.
if let для быстрой проверки Some
↗
5.
unwrap и expect: удобно, но осторожно
↗
6.
unwrap_or и unwrap_or_else: значение по умолчанию
↗
7.
Полезные методы: map, is_some, as_ref
↗
Модуль 18. Vec — динамический список
8 уроков
1.
Зачем нужен Vec и чем он лучше массива
↗
2.
Создаём вектор: Vec::new и макрос vec!
↗
3.
Добавляем и убираем элементы: push и pop
↗
4.
Доступ по индексу против метода get
↗
5.
Перебор вектора циклом for
↗
6.
Изменение элементов через &mut
↗
7.
Вектор владеет элементами: move внутрь и наружу
↗
8.
Полезные методы: len, contains, sort
↗
Модуль 19. Строки и HashMap подробно
8 уроков
1.
Строка как UTF-8: почему нельзя индексировать по числу
↗
2.
Склеиваем строки: push_str, push и +
↗
3.
Перебор символов через chars и байтов через bytes
↗
4.
Полезные методы строк: split, trim, replace, to_uppercase
↗
5.
HashMap: хранилище пар ключ-значение
↗
6.
Вставка и чтение: insert и get
↗
7.
Обновление значений и entry
↗
8.
Перебор HashMap и владение ключами и значениями
↗
Модуль 20. Обработка ошибок
8 уроков
1.
Два вида ошибок: невосстановимые и восстановимые
↗
2.
panic! и когда программа обязана упасть
↗
3.
Тип Result: Ok и Err
↗
4.
Разбор Result через match
↗
5.
unwrap и expect на Result: быстро и рискованно
↗
6.
Оператор ?: элегантное распространение ошибок
↗
7.
Возврат Result из функции и из main
↗
8.
Пишем понятные сообщения об ошибках
↗
Модуль 21. Дженерики и трейты: введение
8 уроков
1.
Зачем нужны дженерики: избавляемся от дублирования
↗
2.
Обобщённая функция с параметром типа
↗
3.
Обобщённые структуры
↗
4.
Трейт: общий контракт поведения
↗
5.
Реализуем трейт для своего типа через impl
↗
6.
Метод трейта по умолчанию
↗
7.
Простое ограничение трейтом:
↗
8.
Стандартные трейты рядом: Debug, Clone, PartialEq
↗
Модуль 22. Модули, тесты и внешние крейты
8 уроков
1.
Зачем нужны модули: наводим порядок в коде
↗
2.
mod и вложенные модули
↗
3.
pub: делаем элементы публичными
↗
4.
use: подключаем пути коротко
↗
5.
Разбиваем проект на файлы-модули
↗
6.
Крейты и стандартная библиотека
↗
7.
Пишем первый тест: #[test] и assert!
↗
8.
cargo test, assert_eq! и подключение крейта через cargo add
↗
Модуль 23. Итоговый проект: менеджер задач в терминале
7 уроков
1.
Задумка проекта: что должен уметь наш CLI-менеджер задач
↗
2.
Проектируем данные: структура Task и enum статуса
↗
3.
Хранилище задач на Vec и методы добавления
↗
4.
Читаем ввод пользователя и разбираем команды
↗
5.
Отмечаем выполнение и удаляем задачи с обработкой ошибок
↗
6.
Наводим красоту: вывод списка и понятные сообщения
↗
7.
Куда двигаться дальше: анонс курса «Rust для мидлов»
↗