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}