Programación de dardos - Genéricos

Dardo es un optionally typed language. Las colecciones en Dart son heterogéneas por defecto. En otras palabras, una sola colección de Dart puede albergar valores de varios tipos. Sin embargo, se puede hacer una colección de Dart para mantener valores homogéneos. El concepto de Genéricos se puede utilizar para lograr lo mismo.

El uso de Genéricos impone una restricción sobre el tipo de datos de los valores que puede contener la colección. Estas colecciones se denominan colecciones con seguridad de tipos. La seguridad de tipos es una función de programación que garantiza que un bloque de memoria solo pueda contener datos de un tipo de datos específico.

Todas las colecciones de Dart admiten la implementación de seguridad de tipos a través de genéricos. Se usa un par de corchetes angulares que contienen el tipo de datos para declarar una colección de tipo seguro. La sintaxis para declarar una colección de tipo seguro es la siguiente.

Sintaxis

Collection_name <data_type> identifier= new Collection_name<data_type>

Las implementaciones con seguridad de tipos de List, Map, Set y Queue se muestran a continuación. Esta característica también es compatible con todas las implementaciones de los tipos de colección mencionados anteriormente.

Ejemplo: lista genérica

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

Debería producir lo siguiente output -

WARNING 
ERROR 
INFO

Un intento de insertar un valor que no sea el tipo especificado resultará en un error de compilación. El siguiente ejemplo lo ilustra.

Ejemplo

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

Debería producir lo siguiente output -

1                                                                                     
ERROR                                                                             
INFO

Ejemplo: conjunto genérico

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

Debería producir lo siguiente output -

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

Ejemplo: cola genérica

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

Debería producir lo siguiente output -

Default implementation ListQueue<int> 
20 
30 
40

Mapa genérico

Una declaración de mapa con seguridad de tipos especifica los tipos de datos de:

  • La clave
  • El valor

Sintaxis

Map <Key_type, value_type>

Ejemplo

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

Debería producir lo siguiente output -

Map :{name: Tom, Id: E1001}