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}