Type în Dart

Un obiect care reprezintă un tip Dart, obținut scriind numele tipului sau cu runtimeType.

Sintaxă
abstract interface class Type
// valori: int, String, List<int>, x.runtimeType

Ce face Type

În Dart, și tipurile sunt valori: scriind int sau String într-o expresie obții un obiect Type. La fel, obiect.runtimeType returnează tipul real al unui obiect. Un Type se poate afișa, compara cu == și folosi ca cheie într-un Map.

Obiectul Type nu are metode utile pentru a crea instanțe sau pentru a verifica subtipuri: runtimeType == num este false pentru un int. Pentru verificări folosește is. Într-o funcție generică, parametrul de tip T poate fi și el folosit ca valoare Type.

Folosirea obișnuită este la depanare și pentru tabele de tipul „tip → acțiune” (de exemplu un registru de convertoare).

Exemple

Exemplul 1: Tipuri ca valori

String numeTip<T>() => T.toString();

void main() {
  Type t = int;
  print(t);
  print(5.runtimeType == int);
  print(5.runtimeType == num);
  print(<String>['a'].runtimeType);
  print(numeTip<Map<String, double>>());
}

Rezultat

int
true
false
List<String>
Map<String, double>

Exemplul 2: Un registru de valori implicite

const implicite = <Type, Object>{int: 0, double: 0.0, String: '', bool: false};

T valoareImplicita<T>() => implicite[T] as T;

void main() {
  print(valoareImplicita<int>());
  print('"${valoareImplicita<String>()}"');
  print(valoareImplicita<bool>());
  print(implicite.containsKey(List));
}

Rezultat

0
""
false
false

Greșeli frecvente

  • Verifici tipul cu x.runtimeType == T. Eșuează pentru subtipuri; scrie x is T.

Comenzi înrudite

  • Object: Clasa de bază a tuturor claselor Dart, cu excepția lui Null; runtimeType dă tipul real al unui obiect.
  • generics: Clase și funcții cu tipuri ca parametri (<T>), care funcționează la fel pentru orice tip, păstrând verificarea tipurilor.
  • is și is!: Verifică la rulare dacă o valoare are un anumit tip; după verificare, variabila poate fi folosită ca acel tip.