Rust: с нуля до своего органайзера
Все 60 уроков и предисловие доступны в оглавлении. С нуля создаём личный консольный органайзер с сохранением данных и резервной копией. Весь курс бесплатный; регистрация для чтения не нужна.
·
Все уроки открыты: регистрация для чтения не нужна.
-
Прежде чем начать
Бесплатный курс для человека без опыта программирования. Один проект растёт от первого сообщения до личного органайзера.
-
Что такое Rust и зачем он появился
Урок 1. Объяснить выбор языка без обещаний абсолютной безопасности.
-
Какой органайзер мы построим
Урок 2. Различить демонстрацию будущего и доступную сейчас программу.
-
Файлы, папки и рабочее место
Урок 3. Найти сохранённый файл и не перепутать его с копией.
-
Терминал без загадок
Урок 4. Перейти в папку с пробелом в имени.
-
Установка Rust и проверка инструментов
Урок 5. Проверить установку и выполнить пробную сборку.
-
Первый проект Cargo
Урок 6. Различить проверку, сборку и запуск.
-
Разбираем первую программу
Урок 7. Изменить два сообщения и объяснить каждую строку.
-
Ошибки как подсказки
Урок 8. Исправить опечатку и ошибку замысла разными способами.
-
Переменные, значения и типы
Урок 9. Предсказать значения и различить изменение и новое объявление.
-
Числа и арифметика
Урок 10. Проверить расчёт оставшихся задач.
-
Логические значения
Урок 11. Записать и проверить условие отбора задач.
-
Ветвления и выражения
Урок 12. Выбрать безопасное действие и получить значение из блока.
-
Повторение действий
Урок 13. Выполнить действие несколько раз без пропусков и бесконечного повторения.
-
Функции
Урок 14. Отделить вычисление от вывода и объяснить передачу значений.
-
Массивы
Урок 15. Обработать фиксированный набор длительностей и проверить границы.
-
Первый автоматический тест
Урок 16. Проверить расчёт функцией, которая сама сообщает о неверном результате.
-
Практика: простая сводка
Урок 17. Самостоятельно собрать проверяемую сводку из условий, функций, массива и тестов.
-
Значения и память
Урок 18. Различить значение, его владельца и место хранения данных до изучения перемещения.
-
Владение и перемещение
Урок 19. Объяснить, почему переданная строка перестаёт быть доступна под старым именем.
-
Заимствование для чтения
Урок 20. Передать строку функции для чтения и сохранить право использовать её после вызова.
-
Изменяемое заимствование
Урок 21. Изменить строку через функцию и объяснить, когда другой доступ к ней снова разрешён.
-
String и &str: хранить или читать
Урок 22. Выбрать владеющую строку для хранения и текстовое представление для чтения.
-
Срезы: часть данных без копии
Урок 23. Передать функции часть числового набора, не создавая новый массив.
-
Растущий список Vec
Урок 24. Добавлять и удалять названия задач, не задавая число мест заранее.
-
Текст, UTF-8 и видимые буквы
Урок 25. Различать байты, значения `char` и видимые буквы при работе с названием задачи.
-
Кортеж: два результата одной функции
Урок 26. Вернуть название и длительность задачи вместе, не смешав их значения.
-
Структура Task: данные с понятными именами
Урок 27. Собрать название, длительность и состояние задачи в один собственный тип.
-
Методы: действия рядом с Task
Урок 28. Создать задачу, прочитать её состояние и завершить её через методы.
-
Перечисление: состояние задачи из допустимых вариантов
Урок 29. Представить состояние задачи одним вариантом, который может хранить дополнительные данные.
-
match: обработать каждый вариант
Урок 30. Прочитать состояние задачи полностью и заметить забытый вариант до запуска программы.
-
Option: когда записи может не быть
Урок 31. Искать название по позиции без аварии, если позиции нет.
-
Result: сообщить о неудачной операции
Урок 32. Превратить текст в число минут и объяснить неверный ввод без остановки программы.
-
Знак вопроса: передать ошибку вызывающему коду
Урок 33. Сначала разобрать число минут, затем проверить его смысл и вернуть понятную ошибку.
-
Ввод из терминала: строка, пустой ответ и конец потока
Урок 34. Прочитать название задачи и различить пустую строку, конец ввода и ошибку чтения.
-
Аргументы запуска: команда и название с пробелами
Урок 35. Передать органайзеру действие и название при запуске из терминала.
-
Команда как проверенное намерение
Урок 36. Отделить разбор слов запуска от действия органайзера и объяснить каждую ошибку.
-
Список задач в памяти: добавить, изменить, завершить, удалить
Урок 37. Выполнить четыре действия с задачами и увидеть, как удаление сдвигает места в списке.
-
ID задачи: номер, который не сдвигается
Урок 38. Выдать каждой задаче устойчивый ID и не переиспользовать его после удаления.
-
Сценарии: проверяем цепочку действий
Урок 39. Проверить не одну функцию, а последствия нескольких действий и ошибки без изменения данных.
-
Контрольная точка: органайзер в памяти
Урок 40. Запустить интерактивный органайзер, выполнить несколько команд за один сеанс и обработать неверный ввод.
-
Итераторы: читать, менять или передавать владение
Урок 41. Выбрать способ обхода задач, не потеряв данные раньше времени.
-
Замыкания: выбрать нужные задачи
Урок 42. Найти задачи по слову и вывести их в устойчивом порядке.
-
Словарь и множество: посчитать метки
Урок 43. Получить статистику по меткам без зависимости от порядка хранения.
-
Модули: отделить логику от запуска
Урок 44. Разделить код на файлы и открывать только нужные имена.
-
Обобщённый тип: одна функция для разных списков
Урок 45. Прочитать и написать функцию, работающую с разными типами элементов.
-
Трейты: общий договор о поведении
Урок 46. Задать общее поведение двум типам и ограничить обобщённую функцию.
-
Время жизни: связь ссылок
Урок 47. Понять, когда результат может ссылаться на входные данные.
-
Внешние библиотеки и зависимости
Урок 48. Подключить обоснованную библиотеку и проверить, что именно добавлено.
-
Пути и файловая система
Урок 49. Выбрать понятное место для файла данных на разных системах.
-
Чтение и запись файлов
Урок 50. Записать текст, прочитать его и объяснить отказ ввода-вывода.
-
Формат JSON
Урок 51. Превратить задачи в JSON и проверить их после чтения.
-
Сохранение без потери данных
Урок 52. Записать новые данные через соседний временный файл, сохранив старые при отказе.
-
Резервная копия
Урок 53. Проверить резервную копию и восстановить данные в отдельный файл.
-
Удобные команды
Урок 54. Давать понятную справку и различать обычный ответ программы и ошибку.
-
Настройки и документация
Урок 55. Объяснить выбор файла данных и написать инструкцию, по которой другой человек запустит проект.
-
Полный набор проверок для файла задач
Урок 56. Проверить сохранённые задачи, повреждённый файл, повторное чтение и текст на разных языках.
-
Автоматические проверки на трёх системах
Урок 57. Запускать форматирование, Clippy и тесты после каждой отправки кода.
-
Сборка и передача программы
Урок 58. Собрать выпуск для своей ОС, показать версию и передать понятный архив.
-
Самостоятельное расширение: приоритет задачи
Урок 59. Добавить приоритет, сохранив чтение старого JSON и отказ от неверных значений.
-
Выпуск консольного органайзера
Урок 60. Собрать знакомые части в программу, которую другой человек может запустить и проверить.