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.53975L’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.0Qui, width e height vengono assegnati tramite una forma abbreviata, mentre area viene calcolata nell’elenco di inizializzazione usando quei valori.
Sfida
FacileCostruiamo 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 classeBoxche rappresenta una scatola 3D con dimensioni e proprietà calcolate automaticamente. La tua classe dovrebbe avere:- Tre campi
final double:length,widtheheight - Due campi
final doublecalcolati:volumeesurfaceArea - Un costruttore che accetta
length,widtheheightusando la forma abbreviatathis., e usa una lista di inizializzazione per calcolarevolume(length × width × height) esurfaceArea(2 × (length×width + width×height + height×length)) - Un metodo
display()che stampa le informazioni sulla scatola
- Tre campi
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
display()su ciascuna scatola nell'ordine indicato.- Una scatola con dimensioni
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.0Provalo 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
}
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
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online