Nel post precedente abbiamo visto come in Dart sia possibile definire le stringhe. Oggi vedremo alcuni tipi particolari, adatti a gestire elenchi di valori.
Le collezioni
Come accade in quasi tutti i linguaggi, anche Dart espone alcuni meccanismi per gestire le collezioni di dati o gruppi di elementi. A differenze dei tipi elementari visti finora, per definire e manipolare le collezioni, Dart utilizza delle classi di oggetti (che espongono quindi dei metodi e delle proprietà): List, Map e Set.
List
Con la classe List è possibile definire una collezione lineare in cui l'ordine degli elementi è mantenuto ed è possible accedere al singolo elemento anche utilizzando la sua posizione nella lista.
// definizione List
void main() {
List<int> numeri = [1,2,3,4];
print(numeri);
List<String> stringhe = ['a','b','c','d'];
print(stringhe);
}
E' possibile utilizzare collezioni a lunghezza fissa e definita
// definizione List
void main() {
// a lunghezza fissa
List<int> fissa = new List(4);
fissa[0] = 0;
fissa[1] = 1;
fissa[3] = 2;
print(fissa);
fissa[2] = 1;
print(fissa);
// iterazione sulla lista
for (int i = 0; i < fissa.length; i++) {
print(fissa[i]);
}
fissa.forEach(
(int valore) => print(valore)
);
}
e a lunghezza variabile.
// definizione List
void main() {
// a lunghezza variabile
List<int> variabile = [];
variabile.add(0);
variabile.add(1);
variabile.add(1);
variabile.add(2);
print(variabile);
variabile[2] = 0;
variabile.addAll([4, 1, 35]);
print(variabile);
// iterazione sulla lista
for (int valore in variabile) {
print(valore);
}
variabile.forEach(
(int valore) => print(valore)
);
}
(se state usando DartPad per il test degli script, ricordatevi di disattivare il Null Safety mode)
Map
Con la classe Map è possibile definire una collezione associativa non-lineare in cui l'ordine non è determinato ed è possible accedere al singolo elemento utilizzando una chiave univoca ad esso associata.
// definizione Map
void main() {
// definizione esplicita
final Map<String, int> valori = {
'giallo': 10,
'rosso': 20,
'verde': 30,
'nero': 40,
};
print(valori);
// definizione con chiavi
Map<String, int> mappa = Map();
mappa['giallo'] = 10;
mappa['rosso'] = 20;
mappa['verde'] = 30;
mappa['nero'] = 40;
print(mappa);
// iterazione sulla lista
for (String chiave in mappa.keys) {
print(chiave);
}
for (int valore in mappa.values) {
print(valore);
}
for (String chiave in mappa.keys) {
print("chiave $chiave = ${mappa[chiave]}");
}
mappa.forEach((chiave, valore) {
print("chiave $chiave = $valore");
});
}
Set
Con la classe Set è possibile definire una collezione non-lineare di elementi unici in cui l'ordine non è determinato. La particolarità di questa classe è che gli eventuali elementi doppi vengono ignorati:
// definizione Set
void main() {
Set<int> set1 = Set();
set1.add(5);
set1.add(6);
print(set1);
// iterazione sulla lista
for (int valore in set1) {
print(valore);
}
List<int> list = [1, 2, 3, 1];
Set<int> set2 = Set.from(list);
set2.add(3);
set2.add(4);
print(set2);
// iterazione sulla lista
for (int valore in set2) {
print(valore);
}
}
Con questo post si conclude la panoramica sulla definizione dei tipi in Dart. Nel prossimo vedremo la definizione delle funzioni, con particolare riferimento al passaggio dei parametri.
Come per gli articoli precedenti potete trovare gli script utilizzati negli esempi tra le mie repo GitHub: https://github.com/luigimicco/dart-base
Commenti
Posta un commento