Как смоделировать undefined в Dart

Aug 24 2020

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

Есть ли стандартный способ моделирования этой разницы в Dart?

Ответы

4 lrn Aug 24 2020 at 22:05

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