Dart-Programmierung - Generika
Dart ist ein optionally typed language. Sammlungen in Dart sind standardmäßig heterogen. Mit anderen Worten, eine einzelne Dart-Sammlung kann Werte verschiedener Typen hosten. Es kann jedoch eine Dart-Sammlung erstellt werden, um homogene Werte zu halten. Das Konzept der Generika kann verwendet werden, um das gleiche zu erreichen.
Die Verwendung von Generics erzwingt eine Einschränkung des Datentyps der Werte, die in der Sammlung enthalten sein können. Solche Sammlungen werden als typsichere Sammlungen bezeichnet. Die Typensicherheit ist eine Programmierfunktion, die sicherstellt, dass ein Speicherblock nur Daten eines bestimmten Datentyps enthalten kann.
Alle Dart-Sammlungen unterstützen die Implementierung der Typensicherheit über Generika. Ein Paar eckiger Klammern, die den Datentyp enthalten, wird verwendet, um eine typsichere Sammlung zu deklarieren. Die Syntax zum Deklarieren einer typsicheren Sammlung lautet wie folgt.
Syntax
Collection_name <data_type> identifier= new Collection_name<data_type>
Die typsicheren Implementierungen von List, Map, Set und Queue sind unten angegeben. Diese Funktion wird auch von allen Implementierungen der oben genannten Sammlungstypen unterstützt.
Beispiel: Generische Liste
void main() {
List <String> logTypes = new List <String>();
logTypes.add("WARNING");
logTypes.add("ERROR");
logTypes.add("INFO");
// iterating across list
for (String type in logTypes) {
print(type);
}
}
Es sollte Folgendes erzeugen output - -
WARNING
ERROR
INFO
Der Versuch, einen anderen Wert als den angegebenen Typ einzufügen, führt zu einem Kompilierungsfehler. Das folgende Beispiel veranschaulicht dies.
Beispiel
void main() {
List <String> logTypes = new List <String>();
logTypes.add(1);
logTypes.add("ERROR");
logTypes.add("INFO");
//iterating across list
for (String type in logTypes) {
print(type);
}
}
Es sollte Folgendes erzeugen output - -
1
ERROR
INFO
Beispiel: Generisches Set
void main() {
Set <int>numberSet = new Set<int>();
numberSet.add(100);
numberSet.add(20);
numberSet.add(5);
numberSet.add(60);
numberSet.add(70);
// numberSet.add("Tom");
compilation error;
print("Default implementation :${numberSet.runtimeType}");
for(var no in numberSet) {
print(no);
}
}
Es sollte Folgendes erzeugen output - -
Default implementation :_CompactLinkedHashSet<int>
100
20
5
60
70
Beispiel: Generische Warteschlange
import 'dart:collection';
void main() {
Queue<int> queue = new Queue<int>();
print("Default implementation ${queue.runtimeType}");
queue.addLast(10);
queue.addLast(20);
queue.addLast(30);
queue.addLast(40);
queue.removeFirst();
for(int no in queue){
print(no);
}
}
Es sollte Folgendes erzeugen output - -
Default implementation ListQueue<int>
20
30
40
Generische Karte
Eine typsichere Kartendeklaration gibt die Datentypen von - an
- Der Schlüssel
- Der Wert
Syntax
Map <Key_type, value_type>
Beispiel
void main() {
Map <String,String>m={'name':'Tom','Id':'E1001'};
print('Map :${m}');
}
Es sollte Folgendes erzeugen output - -
Map :{name: Tom, Id: E1001}