Menu
Coddy logo textTech

Liste di inizializzazione

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 12 di 110.

Una lista di inizializzazione è il codice che compare dopo i due punti in un costruttore, prima del corpo del costruttore. Viene eseguita prima del corpo del costruttore e viene usata per inizializzare le variabili di istanza.

Hai già visto gli elenchi di inizializzazione nelle lezioni precedenti:

Point.origin() : x = 0, y = 0;

La parte dopo i due punti (x = 0, y = 0) è l’elenco degli inizializzatori. Le inizializzazioni multiple sono separate da virgole.

Gli elenchi di inizializzazione sono essenziali quando si lavora con variabili final, che devono essere impostate prima che venga eseguito il corpo del costruttore:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area);   // 78.53975

L’elenco degli inizializzatori può anche eseguire calcoli o trasformazioni sui parametri del costruttore prima di assegnarli. Questo è utile quando devi ricavare valori o convalidare i dati durante la creazione dell’oggetto.

Puoi combinare la sintassi abbreviata this. con una lista di inizializzazione:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0

Qui, width e height vengono assegnati tramite una forma abbreviata, mentre area viene calcolata nell’elenco di inizializzazione usando quei valori.

challenge icon

Sfida

Facile

Costruiamo un calcolatore delle dimensioni di una scatola che usa liste di inizializzazione per calcolare i valori derivati quando vengono creati gli oggetti.

Organizzerai il codice in due file:

  • box.dart: Definisci una classe Box che rappresenta una scatola 3D con dimensioni e proprietà calcolate automaticamente. La tua classe dovrebbe avere:
    • Tre campi final double: length, width e height
    • Due campi final double calcolati: volume e surfaceArea
    • Un costruttore che accetta length, width e height usando la forma abbreviata this., e usa una lista di inizializzazione per calcolare volume (length × width × height) e surfaceArea (2 × (length×width + width×height + height×length))
    • Un metodo display() che stampa le informazioni sulla scatola
  • main.dart: Importa la classe della scatola e crea due scatole:
    • Una scatola con dimensioni 3.0, 4.0, 5.0
    • Una scatola con dimensioni 2.0, 2.0, 2.0
    Chiama display() su ciascuna scatola nell'ordine indicato.

Il metodo display() dovrebbe stampare nel seguente formato esatto:

Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]

Output previsto:

Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0

Provalo tu

import 'box.dart';

void main() {
  // TODO: Crea una scatola con dimensioni 3.0, 4.0, 5.0
  
  // TODO: Crea una scatola con dimensioni 2.0, 2.0, 2.0
  
  // TODO: Chiama display() su ciascuna scatola nell'ordine previsto
  
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online