Programação Dart - Genéricos
Dart é um optionally typed language. As coleções no Dart são heterogêneas por padrão. Em outras palavras, uma única coleção Dart pode hospedar valores de vários tipos. No entanto, uma coleção Dart pode ser feita para manter valores homogêneos. O conceito de genéricos pode ser usado para conseguir o mesmo.
O uso de Genéricos impõe uma restrição ao tipo de dados dos valores que podem estar contidos na coleção. Essas coleções são denominadas coleções seguras de tipo. A segurança de tipo é um recurso de programação que garante que um bloco de memória só possa conter dados de um tipo de dados específico.
Todas as coleções Dart suportam a implementação de segurança de tipo por meio de genéricos. Um par de colchetes angulares contendo o tipo de dados é usado para declarar uma coleção de tipo seguro. A sintaxe para declarar uma coleção de tipo seguro é fornecida a seguir.
Sintaxe
Collection_name <data_type> identifier= new Collection_name<data_type>
As implementações de tipo seguro de List, Map, Set e Queue são fornecidas abaixo. Esse recurso também é compatível com todas as implementações dos tipos de coleção mencionados acima.
Exemplo: 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);
}
}
Deve produzir o seguinte output -
WARNING
ERROR
INFO
Uma tentativa de inserir um valor diferente do tipo especificado resultará em um erro de compilação. O exemplo a seguir ilustra isso.
Exemplo
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);
}
}
Deve produzir o seguinte output -
1
ERROR
INFO
Exemplo: 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);
}
}
Deve produzir o seguinte output -
Default implementation :_CompactLinkedHashSet<int>
100
20
5
60
70
Exemplo: fila 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);
}
}
Deve produzir o seguinte output -
Default implementation ListQueue<int>
20
30
40
Mapa Genérico
Uma declaração de mapa de tipo seguro especifica os tipos de dados de -
- A chave
- O valor que
Sintaxe
Map <Key_type, value_type>
Exemplo
void main() {
Map <String,String>m={'name':'Tom','Id':'E1001'};
print('Map :${m}');
}
Deve produzir o seguinte output -
Map :{name: Tom, Id: E1001}