Como simular indefinido no Dart
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
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 ).