Введение в необязательное значение в Rust
Необязательное значение отвечает на вопрос, есть ли сейчас данные или их нет. Переменная такого типа не обязана всегда держать число или строку: иногда значение еще не готово, элемент списка отсутствует, ключ в карте не найден. Один тип покрывает оба случая.
Необязательное значение либо хранит данные, либо пусто. Пустота не смешивается с нулем и не подменяет отсутствие: это отдельный вариант, который явно говорит, что брать нечего. Заполненный вариант несет само значение внутри, как вариант перечисления с данными в скобках.
Тип встроен в язык как стандартное перечисление с двумя именами. Его не объявляют в каждой программе заново: имена вариантов и сам тип доступны сразу, как целые числа и логический тип. Дальше разберем оба варианта, полный разбор, короткие условия, цикл с извлечением с конца, запасное число и безопасное чтение списка и карты.
Файлы и первые предложения: some-none/ru.html
(один вариант несет значение, другой означает
пусто), match/ru.html (разбор обязан
назвать и полный вариант, и пустой),
if-let/ru.html (если значение есть,
его сразу достают в ветке, пустой случай
пропускают), while-let/ru.html (цикл
забирает элементы с конца, пока они есть),
unwrap-or/ru.html (если значения нет,
подставляют запасное число), is-some/ru.html
(отдельно спрашивают, есть ли значение,
не доставая его), vec-get/ru.html
(чтение вектора по номеру может вернуть
пусто, и программа при этом не останавливается),
map-get/ru.html (чтение карты по ключу
может вернуть пусто), practice/ru.html
(в этих задачах потренируем пустое и
заполненное значение).