Published using Google Docs
40-classi
Updated automatically every 5 minutes

4: le classi in Dart

Obiettivo

Conoscere la sintassi usata per la definizione delle classi e dell'uso degli oggetti in Dart

Prerequisiti

Conoscere il concetto di oggetto/classe

Strumenti

DartPad

class

La dichiarazione di un oggetto non è molto diversa rispetto a quella che viene fatta in Java: anche in Dart una classe può estendere un'altra classe, ha proprietà e metodi e si dichiara usando la parola chiave class ma in un file possono essere dichiarate più classi senza particolari riguardi.

Vedremo qui sotto alcune particolarità sintattiche.

Costruttori

Anche in Dart una classe non eredita i costruttori della superclasse e una classe senza costruttori ha soltanto quello di default con nessun parametro.

Visto che Dart distingue due funzioni (o metodi che sia) soltanto in base al nome non è possibile avere due costruttori "classici" diversi.

È però possibile definire il costruttore in diversi modi. Poniamo di avere una classe chiamata Quadrato che ha una sola proprietà lato

class Quadrato {
        double? lato;
}

Un classico costruttore potrebbe essere

Quadrato(double l){
        lato = l;
}

ma è possibile definire lo stesso costruttore nel modo seguente:

Quadrato(this.lato);

oppure anche utilizzando una "Initializer list"

Quadrato(double l): lato=l;

Per costruire un oggetto si usa la solita sintassi tenendo conto del fatto che new può essere omesso:

var q1 = Quadrato(3);
var q2 = new Quadrato(6);

Costruttori per nome

Siccome è possibile che servano dei costruttori diversi Dart mette a disposizione una sintassi per farne altri "per nome". Poniamo che io voglia costruire un quadrato in base al suo perimetro:

Quadrato.dalPerimetro(double p){
        lato = p / 4;
}

in questo caso per usarlo dovremmo scrivere

var q2 = Quadrato.dalPerimetro(20);

Get & set

Non si usano allo stesso modo di Java, in breve generalmente si usano meno ma esistono delle parole chiave per esprimerli, questo è un esempio di uso.

Impostare più proprietà dello stesso oggetto

Questa è soltanto una scorciatoia! Poniamo che il mio oggetto Quadrato abbia la proprietà nome e il metodo arrotonda() utilizzato per arrotondare la misura del lato, potrei usarle nel seguente modo:

var salaDaPranzo = Quadrato(50);
salaDaPranzo.nome = "tavolo";
salaDaPranzo.arrotonda();

ma in Dart posso usare questa sintassi con  ".." che mi consente di abbreviare il tutto:

var salaDaPranzo = Quadrato(50)
        ..nome = "tavolo"
        ..arrotonda();

Per alcune ulteriori caratteristiche degli oggetti è possibile vedere oggettiAvanzati@Dartpad.