Programmazione Dart - Generics
Dart è un file optionally typed language. Le raccolte in Dart sono eterogenee per impostazione predefinita. In altre parole, una singola raccolta Dart può ospitare valori di vario tipo. Tuttavia, è possibile creare una raccolta Dart per contenere valori omogenei. Il concetto di generici può essere utilizzato per ottenere lo stesso risultato.
L'utilizzo di Generics impone una restrizione sul tipo di dati dei valori che possono essere contenuti dalla raccolta. Tali raccolte vengono definite raccolte indipendenti dai tipi. La sicurezza dei tipi è una funzione di programmazione che garantisce che un blocco di memoria possa contenere solo dati di un tipo di dati specifico.
Tutte le raccolte Dart supportano l'implementazione dell'indipendenza dai tipi tramite generics. Una coppia di parentesi angolari contenente il tipo di dati viene utilizzata per dichiarare una raccolta indipendente dai tipi. La sintassi per dichiarare una raccolta indipendente dai tipi è la seguente.
Sintassi
Collection_name <data_type> identifier= new Collection_name<data_type>
Di seguito sono fornite le implementazioni indipendenti dai tipi di List, Map, Set e Queue. Questa funzione è supportata anche da tutte le implementazioni dei tipi di raccolta sopra menzionati.
Esempio: elenco generico
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);
}
}
Dovrebbe produrre quanto segue output -
WARNING
ERROR
INFO
Un tentativo di inserire un valore diverso dal tipo specificato provocherà un errore di compilazione. Il seguente esempio lo illustra.
Esempio
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);
}
}
Dovrebbe produrre quanto segue output -
1
ERROR
INFO
Esempio: set generico
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);
}
}
Dovrebbe produrre quanto segue output -
Default implementation :_CompactLinkedHashSet<int>
100
20
5
60
70
Esempio: coda generica
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);
}
}
Dovrebbe produrre quanto segue output -
Default implementation ListQueue<int>
20
30
40
Mappa generica
Una dichiarazione di mappa indipendente dai tipi specifica i tipi di dati di -
- Il tasto
- Il valore
Sintassi
Map <Key_type, value_type>
Esempio
void main() {
Map <String,String>m={'name':'Tom','Id':'E1001'};
print('Map :${m}');
}
Dovrebbe produrre quanto segue output -
Map :{name: Tom, Id: E1001}