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}