Menu
Coddy logo textTech

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.53975

Lista 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.0

Tutaj width i height są przypisywane za pomocą skróconego zapisu, a area jest obliczane na liście inicjalizacyjnej przy użyciu tych wartości.

challenge icon

Wyzwanie

Łatwy

Zbudujmy 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, width i height
    • Dwa obliczane pola final double: volume i surfaceArea
    • Konstruktor przyjmujący length, width i height z użyciem skróconej składni this., który korzysta z listy inicjalizującej do obliczenia volume (length × width × height) oraz surfaceArea (2 × (length×width + width×height + height×length))
    • Metodę display(), która wyświetla informacje o pudełku
  • 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
    Wywołaj display() dla każdego pudełka w podanej kolejności.

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.0

Spró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
  
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Dart online