Как смоделировать undefined в Dart
В JS есть undefined и null. Undefined означает «нет значения», null означает «значение, эквивалентное пустоте». Однако в Dart (и, возможно, на других языках, я не знаю, но сейчас я использую Dart) undefined нет, только null. Следовательно, невозможно провести различие между ценностью, эквивалентной пустоте, и отсутствием ценности.
Есть ли стандартный способ моделирования этой разницы в Dart?
Ответы
Нет. nullЗначение (типа Null) - это единственное встроенное значение, которое представляет отсутствие значения. Он не различает, почему значение отсутствует.
Это также (почти) единственный тип, который вы можете комбинировать с другим типом непосредственно в системе типов. С нулевой безопасностью вы сможете писать int?для int-или- Null.
Если вам нужен другой маркер отсутствия, вы можете использовать (или написать) такой Optionтип, как:
abstract class Option<T> {
final T value;
bool get hasValue => true;
Option(this.value);
factory Option.none() => const _OptionNone();
}
class _OptionNone implements Option<Never> {
const _OptionNone();
bool get hasValue => false;
T get value => throw UnsupportedError("None option has no value");
}
Тогда вы можете представить либо значение, либо его отсутствие. (Существуют реализации такого класса, например, в пакете quiver ).