Un po' di linguaggio Dart - 3

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([4135]);
    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<Stringint> valori = {
      'giallo'10,
      'rosso'20,
      'verde'30,
      'nero'40,
    };
    print(valori); 

    // definizione con chiavi
    Map<Stringint> 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 = [1231];
    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