Dartで未定義をシミュレートする方法

Aug 24 2020

JSには、undefinedとnullがあります。Undefinedは「値なし」を意味し、nullは「空と同等の値」を意味します。ただし、Dartでは(おそらく他の言語ではわかりませんが、現在Dartを使用しています)、未定義はなく、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パッケージには、このようなクラスの既存の実装があります)。