#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).