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; scriex 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.