Listy inicjalizujące
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 12 z 110.
Lista inicjalizacyjna to kod, który pojawia się po dwukropku w konstruktorze, przed treścią konstruktora. Jest wykonywana przed uruchomieniem treści konstruktora i służy do inicjalizacji zmiennych instancji.
Listy inicjalizujące były już omawiane we wcześniejszych lekcjach:
Point.origin() : x = 0, y = 0;Część po dwukropku (x = 0, y = 0) to lista inicjalizatorów. Poszczególne inicjalizacje są oddzielone przecinkami.
Listy inicjalizujące są niezbędne podczas pracy ze zmiennymi final, które muszą zostać ustawione przed uruchomieniem treści konstruktora:
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.53975Lista inicjalizacyjna może również wykonywać obliczenia lub przekształcenia parametrów konstruktora przed ich przypisaniem. Jest to przydatne, gdy podczas tworzenia obiektu musisz wyprowadzić wartości lub zweryfikować dane.
Możesz połączyć skróconą składnię this. z listą inicjalizacyjną:
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.0Tutaj width i height są przypisywane za pomocą skróconego zapisu, a area jest obliczane na liście inicjalizacyjnej przy użyciu tych wartości.
Wyzwanie
ŁatwyZbudujmy kalkulator wymiarów pudełka, który wykorzystuje listy inicjalizujące do obliczania wartości pochodnych podczas tworzenia obiektów.
Podzielisz kod na dwa pliki:
box.dart: Zdefiniuj klasęBox, która reprezentuje trójwymiarowe pudełko o określonych wymiarach i automatycznie obliczanych właściwościach. Klasa powinna zawierać:- Trzy pola
final double:length,widthiheight - Dwa obliczane pola
final double:volumeisurfaceArea - Konstruktor przyjmujący
length,widthiheightz użyciem skróconej składnithis., który korzysta z listy inicjalizującej do obliczeniavolume(length × width × height) orazsurfaceArea(2 × (length×width + width×height + height×length)) - Metodę
display(), która wyświetla informacje o pudełku
- Trzy pola
main.dart: Zaimportuj klasę pudełka i utwórz dwa pudełka:- Pudełko o wymiarach
3.0,4.0,5.0 - Pudełko o wymiarach
2.0,2.0,2.0
display()dla każdego pudełka w podanej kolejności.- Pudełko o wymiarach
Metoda display() powinna wyświetlać tekst w dokładnie takim formacie:
Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]Oczekiwany wynik:
Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0Spróbuj swoich sił
import 'box.dart';
void main() {
// TODO: Utwórz pudełko o wymiarach 3.0, 4.0, 5.0
// TODO: Utwórz pudełko o wymiarach 2.0, 2.0, 2.0
// TODO: Wywołaj display() kolejno dla każdego pudełka
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online