Shanraq.org Shanraq.org

Rust: с нуля до своего органайзера

Все 60 уроков и предисловие доступны в оглавлении. С нуля создаём личный консольный органайзер с сохранением данных и резервной копией. Весь курс бесплатный; регистрация для чтения не нужна.

Уроков: 60 · 263 мин на чтение · 1300 мин на практику

Все уроки открыты: регистрация для чтения не нужна.

Начать с первого урока →

  1. Прежде чем начать

    Бесплатный курс для человека без опыта программирования. Один проект растёт от первого сообщения до личного органайзера.

    2 мин на чтение

  2. Что такое Rust и зачем он появился

    Урок 1. Объяснить выбор языка без обещаний абсолютной безопасности.

    3 мин на чтение · 30 мин на практику

  3. Какой органайзер мы построим

    Урок 2. Различить демонстрацию будущего и доступную сейчас программу.

    3 мин на чтение · 30 мин на практику

  4. Файлы, папки и рабочее место

    Урок 3. Найти сохранённый файл и не перепутать его с копией.

    3 мин на чтение · 30 мин на практику

  5. Терминал без загадок

    Урок 4. Перейти в папку с пробелом в имени.

    3 мин на чтение · 30 мин на практику

  6. Установка Rust и проверка инструментов

    Урок 5. Проверить установку и выполнить пробную сборку.

    5 мин на чтение · 30 мин на практику

  7. Первый проект Cargo

    Урок 6. Различить проверку, сборку и запуск.

    4 мин на чтение · 30 мин на практику

  8. Разбираем первую программу

    Урок 7. Изменить два сообщения и объяснить каждую строку.

    3 мин на чтение · 30 мин на практику

  9. Ошибки как подсказки

    Урок 8. Исправить опечатку и ошибку замысла разными способами.

    3 мин на чтение · 30 мин на практику

  10. Переменные, значения и типы

    Урок 9. Предсказать значения и различить изменение и новое объявление.

    5 мин на чтение · 30 мин на практику

  11. Числа и арифметика

    Урок 10. Проверить расчёт оставшихся задач.

    5 мин на чтение · 30 мин на практику

  12. Логические значения

    Урок 11. Записать и проверить условие отбора задач.

    4 мин на чтение · 20 мин на практику

  13. Ветвления и выражения

    Урок 12. Выбрать безопасное действие и получить значение из блока.

    5 мин на чтение · 20 мин на практику

  14. Повторение действий

    Урок 13. Выполнить действие несколько раз без пропусков и бесконечного повторения.

    5 мин на чтение · 20 мин на практику

  15. Функции

    Урок 14. Отделить вычисление от вывода и объяснить передачу значений.

    4 мин на чтение · 20 мин на практику

  16. Массивы

    Урок 15. Обработать фиксированный набор длительностей и проверить границы.

    5 мин на чтение · 20 мин на практику

  17. Первый автоматический тест

    Урок 16. Проверить расчёт функцией, которая сама сообщает о неверном результате.

    3 мин на чтение · 20 мин на практику

  18. Практика: простая сводка

    Урок 17. Самостоятельно собрать проверяемую сводку из условий, функций, массива и тестов.

    3 мин на чтение · 20 мин на практику

  19. Значения и память

    Урок 18. Различить значение, его владельца и место хранения данных до изучения перемещения.

    4 мин на чтение · 20 мин на практику

  20. Владение и перемещение

    Урок 19. Объяснить, почему переданная строка перестаёт быть доступна под старым именем.

    4 мин на чтение · 20 мин на практику

  21. Заимствование для чтения

    Урок 20. Передать строку функции для чтения и сохранить право использовать её после вызова.

    3 мин на чтение · 20 мин на практику

  22. Изменяемое заимствование

    Урок 21. Изменить строку через функцию и объяснить, когда другой доступ к ней снова разрешён.

    4 мин на чтение · 20 мин на практику

  23. String и &str: хранить или читать

    Урок 22. Выбрать владеющую строку для хранения и текстовое представление для чтения.

    4 мин на чтение · 20 мин на практику

  24. Срезы: часть данных без копии

    Урок 23. Передать функции часть числового набора, не создавая новый массив.

    4 мин на чтение · 20 мин на практику

  25. Растущий список Vec

    Урок 24. Добавлять и удалять названия задач, не задавая число мест заранее.

    4 мин на чтение · 20 мин на практику

  26. Текст, UTF-8 и видимые буквы

    Урок 25. Различать байты, значения `char` и видимые буквы при работе с названием задачи.

    4 мин на чтение · 20 мин на практику

  27. Кортеж: два результата одной функции

    Урок 26. Вернуть название и длительность задачи вместе, не смешав их значения.

    4 мин на чтение · 20 мин на практику

  28. Структура Task: данные с понятными именами

    Урок 27. Собрать название, длительность и состояние задачи в один собственный тип.

    4 мин на чтение · 20 мин на практику

  29. Методы: действия рядом с Task

    Урок 28. Создать задачу, прочитать её состояние и завершить её через методы.

    4 мин на чтение · 20 мин на практику

  30. Перечисление: состояние задачи из допустимых вариантов

    Урок 29. Представить состояние задачи одним вариантом, который может хранить дополнительные данные.

    4 мин на чтение · 20 мин на практику

  31. match: обработать каждый вариант

    Урок 30. Прочитать состояние задачи полностью и заметить забытый вариант до запуска программы.

    5 мин на чтение · 20 мин на практику

  32. Option: когда записи может не быть

    Урок 31. Искать название по позиции без аварии, если позиции нет.

    4 мин на чтение · 20 мин на практику

  33. Result: сообщить о неудачной операции

    Урок 32. Превратить текст в число минут и объяснить неверный ввод без остановки программы.

    4 мин на чтение · 20 мин на практику

  34. Знак вопроса: передать ошибку вызывающему коду

    Урок 33. Сначала разобрать число минут, затем проверить его смысл и вернуть понятную ошибку.

    4 мин на чтение · 20 мин на практику

  35. Ввод из терминала: строка, пустой ответ и конец потока

    Урок 34. Прочитать название задачи и различить пустую строку, конец ввода и ошибку чтения.

    4 мин на чтение · 20 мин на практику

  36. Аргументы запуска: команда и название с пробелами

    Урок 35. Передать органайзеру действие и название при запуске из терминала.

    4 мин на чтение · 20 мин на практику

  37. Команда как проверенное намерение

    Урок 36. Отделить разбор слов запуска от действия органайзера и объяснить каждую ошибку.

    4 мин на чтение · 20 мин на практику

  38. Список задач в памяти: добавить, изменить, завершить, удалить

    Урок 37. Выполнить четыре действия с задачами и увидеть, как удаление сдвигает места в списке.

    5 мин на чтение · 20 мин на практику

  39. ID задачи: номер, который не сдвигается

    Урок 38. Выдать каждой задаче устойчивый ID и не переиспользовать его после удаления.

    5 мин на чтение · 20 мин на практику

  40. Сценарии: проверяем цепочку действий

    Урок 39. Проверить не одну функцию, а последствия нескольких действий и ошибки без изменения данных.

    5 мин на чтение · 20 мин на практику

  41. Контрольная точка: органайзер в памяти

    Урок 40. Запустить интерактивный органайзер, выполнить несколько команд за один сеанс и обработать неверный ввод.

    10 мин на чтение · 20 мин на практику

  42. Итераторы: читать, менять или передавать владение

    Урок 41. Выбрать способ обхода задач, не потеряв данные раньше времени.

    4 мин на чтение · 20 мин на практику

  43. Замыкания: выбрать нужные задачи

    Урок 42. Найти задачи по слову и вывести их в устойчивом порядке.

    4 мин на чтение · 20 мин на практику

  44. Словарь и множество: посчитать метки

    Урок 43. Получить статистику по меткам без зависимости от порядка хранения.

    4 мин на чтение · 20 мин на практику

  45. Модули: отделить логику от запуска

    Урок 44. Разделить код на файлы и открывать только нужные имена.

    4 мин на чтение · 20 мин на практику

  46. Обобщённый тип: одна функция для разных списков

    Урок 45. Прочитать и написать функцию, работающую с разными типами элементов.

    4 мин на чтение · 20 мин на практику

  47. Трейты: общий договор о поведении

    Урок 46. Задать общее поведение двум типам и ограничить обобщённую функцию.

    3 мин на чтение · 20 мин на практику

  48. Время жизни: связь ссылок

    Урок 47. Понять, когда результат может ссылаться на входные данные.

    3 мин на чтение · 20 мин на практику

  49. Внешние библиотеки и зависимости

    Урок 48. Подключить обоснованную библиотеку и проверить, что именно добавлено.

    4 мин на чтение · 20 мин на практику

  50. Пути и файловая система

    Урок 49. Выбрать понятное место для файла данных на разных системах.

    3 мин на чтение · 20 мин на практику

  51. Чтение и запись файлов

    Урок 50. Записать текст, прочитать его и объяснить отказ ввода-вывода.

    4 мин на чтение · 20 мин на практику

  52. Формат JSON

    Урок 51. Превратить задачи в JSON и проверить их после чтения.

    5 мин на чтение · 20 мин на практику

  53. Сохранение без потери данных

    Урок 52. Записать новые данные через соседний временный файл, сохранив старые при отказе.

    4 мин на чтение · 20 мин на практику

  54. Резервная копия

    Урок 53. Проверить резервную копию и восстановить данные в отдельный файл.

    5 мин на чтение · 20 мин на практику

  55. Удобные команды

    Урок 54. Давать понятную справку и различать обычный ответ программы и ошибку.

    3 мин на чтение · 20 мин на практику

  56. Настройки и документация

    Урок 55. Объяснить выбор файла данных и написать инструкцию, по которой другой человек запустит проект.

    4 мин на чтение · 20 мин на практику

  57. Полный набор проверок для файла задач

    Урок 56. Проверить сохранённые задачи, повреждённый файл, повторное чтение и текст на разных языках.

    6 мин на чтение · 20 мин на практику

  58. Автоматические проверки на трёх системах

    Урок 57. Запускать форматирование, Clippy и тесты после каждой отправки кода.

    4 мин на чтение · 20 мин на практику

  59. Сборка и передача программы

    Урок 58. Собрать выпуск для своей ОС, показать версию и передать понятный архив.

    5 мин на чтение · 20 мин на практику

  60. Самостоятельное расширение: приоритет задачи

    Урок 59. Добавить приоритет, сохранив чтение старого JSON и отказ от неверных значений.

    4 мин на чтение · 20 мин на практику

  61. Выпуск консольного органайзера

    Урок 60. Собрать знакомые части в программу, которую другой человек может запустить и проверить.

    17 мин на чтение · 20 мин на практику