Programmation Dart - Génériques

Dart est un optionally typed language. Les collections dans Dart sont hétérogènes par défaut. En d'autres termes, une seule collection Dart peut héberger des valeurs de différents types. Cependant, une collection Dart peut être conçue pour contenir des valeurs homogènes. Le concept de génériques peut être utilisé pour atteindre la même chose.

L'utilisation de Generics impose une restriction sur le type de données des valeurs qui peuvent être contenues par la collection. Ces collections sont appelées collections de type sécurisé. La sécurité de type est une fonction de programmation qui garantit qu'un bloc de mémoire ne peut contenir que des données d'un type de données spécifique.

Toutes les collections Dart prennent en charge la mise en œuvre de la sécurité de type via des génériques. Une paire de crochets angulaires contenant le type de données est utilisée pour déclarer une collection de type sécurisé. La syntaxe pour déclarer une collection de type sécurisé est la suivante.

Syntaxe

Collection_name <data_type> identifier= new Collection_name<data_type>

Les implémentations de type sécurisé de List, Map, Set et Queue sont données ci-dessous. Cette fonctionnalité est également prise en charge par toutes les implémentations des types de collection mentionnés ci-dessus.

Exemple: liste générique

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

Il devrait produire les éléments suivants output -

WARNING 
ERROR 
INFO

Une tentative d'insertion d'une valeur autre que le type spécifié entraînera une erreur de compilation. L'exemple suivant illustre cela.

Exemple

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

Il devrait produire les éléments suivants output -

1                                                                                     
ERROR                                                                             
INFO

Exemple: ensemble générique

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

Il devrait produire les éléments suivants output -

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

Exemple: file d'attente générique

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

Il devrait produire les éléments suivants output -

Default implementation ListQueue<int> 
20 
30 
40

Carte générique

Une déclaration de carte de type sécurisé spécifie les types de données de -

  • La clé
  • La valeur

Syntaxe

Map <Key_type, value_type>

Exemple

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

Il devrait produire les éléments suivants output -

Map :{name: Tom, Id: E1001}