Come simulare undefined in Dart

Aug 24 2020

In JS, c'è undefined e null. Undefined significa "nessun valore", null significa "valore equivalente al vuoto". In Dart tuttavia (e forse in altre lingue, non lo so, ma in questo momento sto usando Dart), non c'è nessun indefinito, solo null. È quindi impossibile distinguere tra un valore equivalente al vuoto e l'assenza di valore.

Esiste un modo standard per simulare questa differenza in Dart?

Risposte

4 lrn Aug 24 2020 at 22:05

No. Il nullvalore (di tipo Null) è l'unico valore predefinito che rappresenta l'assenza di un valore. Non distingue perché il valore è assente.

È anche (quasi) l'unico tipo che puoi combinare con un altro tipo direttamente nel sistema di tipi. Con la sicurezza nulla, sarai in grado di scrivere int?per int-oppure- Null.

Se vuoi un altro indicatore per l'assenza, puoi usare (o scrivere) un Optiontipo come:

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

Quindi puoi rappresentare un valore o nessun valore. (Esistono implementazioni di tale classe, ad esempio nel pacchetto quiver ).