Introduzione a Dart: prima parte

Di - 20 October 2012 - in

Googlab presenta il primo di una serie di articoli dedicati agli sviluppatori: a questo seguiranno infatti altri approfondimenti sulle caratteristiche principali e guide allo sviluppo di applicazioni HTML5 con Dart.

Nell’ottobre del 2011 in occasione della GOTO conference, Lars Bak e Kasper Lund, entrambi ingegneri del software presso Google, hanno presentato un nuovo linguaggio di programmazione per il web: Dart.

La tag line, “Dart: structured web apps”, ne riassume perfettamente i punti di forza:

  • è rivolto al web
  • è object-oriented
  • è modulare

Lo scopo del progetto è offrire la possibilità di sviluppare applicazioni HTML5 robuste, sicure, scalabili e compatibili con tutti i moderni web browsers, colmando conseguentemente alcune lacune di Javascript.

Vediamo subito quali sono le novità che Dart introduce e quali sono le differenze principali con Javascript:

  • Dart supporta nativamente classi, costruttori e multithreading
  • I tipi di dato sono opzionali
  • Il codice può essere eseguito in checked mode (per il debug) o in production mode
  • Il codice non viene eseguito se si prova ad accedere ad una proprietà inesistente/inaccessibile o se c’è un errore di sintassi. In Javascript accade il contrario, alcuni errori sono tollerati (e.g. “NaN”, “undefined”) quindi l’esecuzione può portare a risultati inattesi.
  • Il codice può essere organizzato in librerie. Questo oltre a garantire una migliore lettura e organizzazione del codice, lo rende facilmente riusabile e ne semplifica notevolmente le operazioni di debug.
  • Il codice viene eseguito in una virtual machine e può essere compilato in Javascript
  • Dart è distribuito con un potente package manager, pub, tramite il quale gestire versioni e dipendenze di un progetto

Sebbene il linguaggio sia appena uscito dalla fase di Technology Preview — il 16 Ottobre 2012 è stata rilasciata la Milestone 1 — alla luce di tutte queste novità l’attenzione che gravita intorno al progetto cresce costantemente ed è interessante vedere la quantità di librerie, portings ed applicazioni scritte in Dart presenti su GitHub.

L’entusiasmo per Dart viene incoraggiato anche dagli strumenti offerti dal team; sul sito ufficiale, infatti, è disponibile tutto il necessario per essere up and running in pochi minuti:

  • Dart SDK:
    • il core e le librerie principali
    • dart2js, tool per compilare Dart in Javascript. dart2js, per garantire che il codice in uscita sia il più leggero possibile, utilizza il metodo del tree shaking: funzioni, classi ed oggetti inutilizzati non vengono compilati
    • dart, la Virtual Machine
    • pub, il gestore di pacchetti
  • Dart Editor: Le caratteristiche principali:
    • Autocompletamento del codice
    • Strumenti avanzati per il debugging
    • Refactoring
    • Accesso alla documentazione relativa all’elemento selezionato
  • Dartium: Ovvero una versione di Chromium che incorpora la Dart VM

Dopo avere introdotto i concetti di base siamo pronti per scrivere il nostro primo programma. Per iniziare scegliamo un grande classico: un programma che calcoli la distanza fra due punti su un piano.

Dati due punti, la formula per calcolarne la distanza è

dove dx è la differenza fra le due coordinate orizzontali e dy la differenza fra le coordinate verticali.

Scarichiamo innanzitutto la versione di Dart Editor adatta alla nostra piattaforma dal sito ufficiale e installiamolo seguendo la guida che troviamo alla pagina Getting Started.

Avviamo Dart Editor, creiamo una nuova applicazione dal menù File -> New Application, diamole un nome e assicuriamoci che non sia selezionato il check box Generate content for a basic web app.

Di default, le nuove applicazioni hanno questo codice:

void main() {
    print("Hello, World!");
}

Avviando l’applicazione dal menù Run -> Run, possiamo vedere come l’output venga stampato nella parte inferiore dell’Editor, ovvero nella console.

Cancelliamo il contenuto del file e scriviamo questo programma:

#import('dart:math');

class Punto{
  num x,y;
  String etichetta;
  Punto(this.etichetta, this.x, this.y);

  num distanza(Punto secondo){
    return sqrt(((x - secondo.x)*(x - secondo.x)) + ((y - secondo.y)*(y - secondo.y)));
  }

  String toString() => 'Le coordinate del punto $etichetta sono: x=$x, y=$y.';
}

void main() {

  Punto a = new Punto('A',15,20);
  Punto b = new Punto('B',35,5);

  print(a);
  print(b);

  print('La distanza fra ${a.etichetta} e ${b.etichetta} è ${a.distanza(b)}.');
}

Il programma produrrà questo output:

Le coordinate del punto A sono: x=15, y=20.
Le coordinate del punto B sono: x=35, y=5.
La distanza fra A e B è 25.0.

Come prima cosa importiamo la libreria dart:math che contiene la definizione della funzione sqrt() per il calcolo di una radice quadrata.

Analizziamo la classe Punto(): gli attributi sono etichetta, x e y, il primo di tipo String, gli altri due di tipo num. Il metodo distanza() prende in ingresso una seconda istanza di Punto() identificata con secondo, e restituisce il risultato della formula:

return sqrt(((x - secondo.x)*(x - secondo.x)) + ((y - secondo.y)*(y - secondo.y))); 

Avendo invocato questo metodo con a.distanza(b), x si riferisce al valore di a, mentre secondo.x a quello di b.

Il metodo toString è un metodo “speciale” simile a __str__ in Python: converte un oggetto in stringa.

Nel nostro caso stampando un’istanza di Punto() otteniamo una descrizione del punto:

Le coordinate del punto $etichetta sono: x=$x, y=$y. 

Possiamo vedere subito che all’interno di una stringa le variabili sono precedute da $.

Come in C, anche in Dart il programma inizia eseguendo il codice contenuto in main(). Creiamo due istanze di Punto(), la sintassi è molto semplice:

[tipo] [identificatore] = new [tipo]([argomenti]) 

Dopo aver creato i due punti, li “stampiamo”. Passandogli un’istanza di un oggetto, print() ne stamperà il valore di ritorno di toString(), se definita.

Infine il programma termina dopo aver stampato una stringa che contiene le etichette dei due punti e la loro distanza.

Come possiamo vedere, gli elementi principali e la sintassi di questo programma hanno molto in comune con altri linguaggi, quindi tutto suona in qualche modo familiare a chi abbia già un minimo di esperienza nella programmazione.

Inoltre gli strumenti offerti, la possibilità di mettere su un ambiente di sviluppo integrato, la documentazione ufficiale e la notevole mole di progetti open source alla quale abbiamo accennato in precedenza consentono anche a coloro che si avvicinano per la prima volta alla programmazione di imparare in modo efficace il linguaggio ed essere produttivi in tempi relativamente brevi.

Leave a Reply

Claudio d'Angelis Articolo scritto da

Programmatore e studente di Informatica, appassionato di musica, web e sistemi UNIX. Collabora con Googlab dall'Ottobre 2012.

Contatta l'autore

Previous post:

Next post: