Como simular indefinido no Dart

Aug 24 2020

Em JS, existe indefinido e nulo. Indefinido significa "sem valor", nulo significa "valor equivalente ao vazio". Porém, no Dart (e possivelmente em outras línguas, não sei, mas agora estou usando o Dart), não há indefinido, apenas nulo. Portanto, é impossível fazer a distinção entre um valor equivalente ao vazio e a ausência de valor.

Existe uma maneira padrão de simular essa diferença no Dart?

Respostas

4 lrn Aug 24 2020 at 22:05

Não. O nullvalor (do tipo Null) é o único valor embutido que representa a ausência de um valor. Não faz distinção por que o valor está ausente.

É também (quase) o único tipo que você pode combinar com outro tipo diretamente no sistema de tipos. Com segurança nula, você poderá escrever int?para int-ou- Null.

Se você quiser outro marcador de ausência, pode usar (ou escrever) um Optiontipo como:

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

Então você pode representar qualquer valor ou nenhum valor. (Existem implementações de tal classe, por exemplo, no pacote quiver ).