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}