Как имитировать неопределенное в Dart

#dart

#dart

Вопрос:

В JS есть undefined и null. Undefined означает «нет значения», null означает «значение, эквивалентное пустоте». Однако в Dart (и, возможно, в других языках, я не знаю, но прямо сейчас я использую Dart) нет undefined, только null . Следовательно, невозможно провести различие между ценностью, эквивалентной пустоте, и отсутствием ценности.

Существует ли стандартный способ имитации этой разницы в Dart?

Комментарии:

1. undefined — это не «нет значений», это означает непредсказуемое значение или значение, которое не может быть гарантировано для ceome каждый раз. null означает «нет значения», т. е. ссылку без какого-либо объекта или памяти

2. В dart все является ссылочным типом, включая int, double и т.д., И их значение по умолчанию равно null.

Ответ №1:

Нет. 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).