Programowanie w rzutkach - typy ogólne

Dart to optionally typed language. Kolekcje w Dart są domyślnie heterogeniczne. Innymi słowy, pojedyncza kolekcja Dart może zawierać wartości różnych typów. Jednak kolekcję Dart można utworzyć tak, aby zawierała jednorodne wartości. Aby osiągnąć to samo, można użyć koncepcji Generics.

Użycie opcji Generics wymusza ograniczenie typu danych wartości, które mogą być zawarte w kolekcji. Takie kolekcje są nazywane kolekcjami bezpiecznymi dla typów. Bezpieczeństwo typów to funkcja programowania, która zapewnia, że ​​blok pamięci może zawierać tylko dane określonego typu.

Wszystkie kolekcje Dart obsługują implementację bezpieczeństwa typu za pośrednictwem typów generycznych. Para nawiasów kątowych zawierająca typ danych jest używana do deklarowania kolekcji z bezpiecznym typem. Składnia deklarowania kolekcji bezpiecznej dla typów jest podana poniżej.

Składnia

Collection_name <data_type> identifier= new Collection_name<data_type>

Poniżej podano bezpieczną implementację list, mapy, zbioru i kolejki. Ta funkcja jest również obsługiwana przez wszystkie implementacje wyżej wymienionych typów kolekcji.

Przykład: lista ogólna

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); 
   } 
}

Powinien dać następujący wynik output -

WARNING 
ERROR 
INFO

Próba wstawienia wartości innej niż określony typ spowoduje błąd kompilacji. Poniższy przykład ilustruje to.

Przykład

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); 
   } 
}

Powinien dać następujący wynik output -

1                                                                                     
ERROR                                                                             
INFO

Przykład: zestaw ogólny

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); 
   } 
}

Powinien dać następujący wynik output -

Default implementation :_CompactLinkedHashSet<int> 
100 
20 
5 
60 
70

Przykład: kolejka ogólna

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); 
   } 
}

Powinien dać następujący wynik output -

Default implementation ListQueue<int> 
20 
30 
40

Mapa ogólna

Deklaracja mapy bezpiecznej typu określa typy danych -

  • Klucz
  • Wartość

Składnia

Map <Key_type, value_type>

Przykład

void main() { 
   Map <String,String>m={'name':'Tom','Id':'E1001'}; 
   print('Map :${m}'); 
}

Powinien dać następujący wynik output -

Map :{name: Tom, Id: E1001}