Jak symulować undefined w Dart

Aug 24 2020

W JS występuje undefined i null. Niezdefiniowany oznacza „brak wartości”, null oznacza „wartość równoważną pustce”. Jednak w Dart (i prawdopodobnie w innych językach, nie wiem, ale teraz używam Dart) nie ma nieokreślonego, tylko null. Dlatego niemożliwe jest dokonanie rozróżnienia między wartością równoważną pustce a brakiem wartości.

Czy istnieje standardowy sposób symulacji tej różnicy w Dart?

Odpowiedzi

4 lrn Aug 24 2020 at 22:05

Nie. nullWartość (typu Null) jest jedyną wartością wbudowaną, która reprezentuje brak wartości. Nie rozróżnia, dlaczego wartość jest nieobecna.

Jest to również (prawie) jedyny typ, który można łączyć z innym typem bezpośrednio w systemie typów. Przy zerowym bezpieczeństwie będziesz mógł pisać int?dla int-lub- Null.

Jeśli potrzebujesz innego znacznika nieobecności, możesz użyć (lub napisać) Optiontypu takiego jak:

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");
}

Następnie możesz przedstawić wartość lub brak wartości. (Istnieją implementacje takiej klasy np. W pakiecie kołczan ).