Опциональный тип — тип?

Для "значение либо есть, либо его нет" (без сопутствующего сообщения об ошибке — этим он отличается от результат из Т выше) есть отдельный, более простой опциональный тип: тип?. Внутри — та же обёртка из двух псевдополей: .есть (верно) и .значение (валидно, только если .есть истинно):

целое? возраст = 25;       // "поднимается" неявно — просто пиши обычное значение
целое? неизвестно = неуказано;   // явное отсутствие значения

если (возраст.есть)
    вывести(целое_в_текст(возраст.значение));
конец

// Переприсваивание работает так же:
неизвестно = 30;       // теперь есть
неизвестно = неуказано;  // снова нет

В отличие от результат из Т (требующего явного успех(x)/ошибка(msg)), опциональный тип неявно поднимает обычное значение до тип? — короче для частого случая "значение почти всегда есть".

⚠️ Честные ограничения v1

  • T ограничен скалярными типами — целочисленные любого размера,

дробные, верно. Текст и структуры как T не поддержаны — они потребовали бы той же ARC-инфраструктуры владения (копирование при обёртывании, освобождение при перезаписи/выходе из области видимости), что и результат из текста/результат из Структура, которая для опционального типа пока не реализована.

  • Опциональный тип поддержан только для локальных переменных —

как параметр функции, тип возврата функции или поле структуры он пока честно отклоняется с понятной ошибкой, а не падает молча.

  • Нет ?-оператора автоматического распространения (как у

результат из Т внутри функций, объявленных : результат из ...) — разворачивать нужно вручную через .есть/.значение.