Menu
Coddy logo textTech

Konstruktory stałe

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 13 z 110.

Konstruktor stały tworzy obiekty będące stałymi czasu kompilacji. Gdy tworzysz obiekty o tych samych wartościach za pomocą konstruktora const, Dart ponownie używa tej samej instancji w pamięci, co poprawia wydajność.

Aby utworzyć konstruktor stały, dodaj słowo kluczowe const przed nazwą konstruktora i upewnij się, że wszystkie zmienne instancji są final:

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Zarówno white, jak i alsoWhite wskazują na dokładnie ten sam obiekt w pamięci, ponieważ zostały utworzone z identycznymi wartościami za pomocą konstruktora stałego.

Możesz także używać konstruktorów const bez słowa kluczowego const, co tworzy zwykłe (niebędące stałymi) instancje:

var red = Color(255, 0, 0);       // Zwykła instancja
const blue = Color(0, 0, 255);    // Stała instancja

Konstruktory stałe są powszechnie używane w przypadku niezmiennych obiektów konfiguracyjnych, predefiniowanych wartości, takich jak kolory lub rozmiary, oraz wszędzie tam, gdzie chcesz zagwarantować niezmienność obiektów, optymalizując jednocześnie wykorzystanie pamięci.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system konfiguracji prostej gry, który wykorzystuje konstruktory stałe do definiowania niezmiennych, wielokrotnego użytku ustawień.

Utworzysz dwa pliki, aby uporządkować swój kod:

  • difficulty.dart: Zdefiniuj klasę Difficulty, która reprezentuje ustawienia poziomu trudności gry. Twoja klasa powinna mieć:
    • Trzy pola final: name (String), enemyCount (int) i playerLives (int)
    • Konstruktor stały, który inicjalizuje wszystkie trzy pola
    • Metodę display(), która wyświetla informacje o poziomie trudności
  • main.dart: Zaimportuj klasę poziomu trudności i utwórz trzy stałe ustawienia poziomu trudności:
    • easy z nazwą 'Easy', 5 przeciwnikami i 5 życiami
    • medium z nazwą 'Medium', 10 przeciwnikami i 3 życiami
    • hard z nazwą 'Hard', 20 przeciwnikami i 1 życiem
    Utwórz wszystkie trzy jako stałe znane w czasie kompilacji, używając słowa kluczowego const. Następnie wywołaj display() dla każdej z nich, w kolejności podanej powyżej. Na koniec sprawdź za pomocą identical(), czy dwa obiekty const Difficulty('Easy', 5, 5) są identyczne, i wyświetl wynik.

Metoda display() powinna wyświetlać tekst w dokładnie takim formacie:

[name]: [enemyCount] enemies, [playerLives] lives

Oczekiwany wynik:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

Spróbuj swoich sił

import 'difficulty.dart';

void main() {
  // TODO: Utwórz trzy stałe ustawienia poziomu trudności, używając słowa kluczowego const:
  // - easy: nazwa 'Easy', 5 enemies, 5 lives
  // - medium: nazwa 'Medium', 10 enemies, 3 lives
  // - hard: nazwa 'Hard', 20 wrogów, 1 życie
  
  // TODO: Wywołaj display() dla każdego poziomu trudności w kolejności: easy, medium, hard
  
  // TODO: Sprawdź, czy dwa obiekty const Difficulty('Easy', 5, 5) są identyczne
  // za pomocą identical() i wypisz wynik
}
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