Menu
Coddy logo textTech

Gettery i settery

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

Gettery i settery umożliwiają dostęp do pól klasy i ich modyfikowanie za pomocą specjalnych metod, które wyglądają jak zwykłe właściwości. Zamiast udostępniać pola bezpośrednio, możesz kontrolować sposób odczytywania i zapisywania wartości.

Getter definiuje się za pomocą słowa kluczowego get i zwraca obliczoną lub zapisaną wartość:

class Rectangle {
  double width;
  double height;
  
  Rectangle(this.width, this.height);
  
  double get area => width * height;
  double get perimeter => 2 * (width + height);
}

Rectangle rect = Rectangle(5, 3);
print(rect.area);      // 15.0
print(rect.perimeter); // 16.0

Zauważ, że do area i perimeter odwołujesz się jak do pól, ale są one obliczane za każdym razem. Nie są potrzebne nawiasy.

Setter używa słowa kluczowego set i pozwala kontrolować sposób przypisywania wartości:

class Temperature {
  double _celsius;
  
  Temperature(this._celsius);
  
  double get celsius => _celsius;
  set celsius(double value) {
    if (value >= -273.15) {
      _celsius = value;
    }
  }
  
  double get fahrenheit => _celsius * 9 / 5 + 32;
  set fahrenheit(double value) {
    celsius = (value - 32) * 5 / 9;
  }
}

Temperature temp = Temperature(25);
print(temp.fahrenheit);  // 77.0
temp.fahrenheit = 100;
print(temp.celsius);     // 37.78

Setter sprawdza poprawność danych wejściowych przed ich zapisaniem, a nawet może konwertować jednostki. Dzięki temu masz kontrolę nad swoimi danymi, zachowując jednocześnie przejrzystą składnię przypominającą właściwości dla użytkowników swojej klasy.

challenge icon

Wyzwanie

Łatwy

Zbudujmy licznik punktów do gry, który wykorzystuje gettery i settery do zarządzania statystykami gracza, z walidacją i obliczanymi wartościami.

Podzielisz swój kod na dwa pliki:

  • player.dart: Zdefiniuj klasę Player, która śledzi wyniki gracza w grze. Twoja klasa powinna zawierać:
    • Pole String name przechowujące imię gracza
    • Prywatne pole int _score o wartości początkowej 0
    • Prywatne pole int _lives o wartości początkowej 3
    • Konstruktor przyjmujący imię gracza
    • Getter score, który zwraca aktualny wynik
    • Setter score, który akceptuje tylko wartości równe 0 lub większe (ignoruj wartości ujemne)
    • Getter lives, który zwraca aktualną liczbę żyć
    • Setter lives, który akceptuje tylko wartości z przedziału od 0 do 5 włącznie (ignoruj wartości spoza tego przedziału)
    • Getter level, który oblicza poziom gracza na podstawie wyniku: wynik podzielony przez 100 (dzielenie całkowite), plus 1
    • Getter isAlive, który zwraca true, jeśli liczba żyć jest większa niż 0
    • Metodę displayStatus(), która wypisuje aktualny status gracza
  • main.dart: Zaimportuj klasę gracza i pokaż działanie getterów i setterów:
    • Utwórz gracza o imieniu 'Alex'
    • Ustaw wynik na 250 i wywołaj displayStatus()
    • Spróbuj ustawić wynik na -50 (powinien zostać zignorowany) i wywołaj displayStatus()
    • Ustaw liczbę żyć na 1 i wywołaj displayStatus()
    • Spróbuj ustawić liczbę żyć na 10 (powinna zostać zignorowana) i wywołaj displayStatus()

Metoda displayStatus() powinna wypisywać tekst w dokładnie takim formacie:

[name] | Score: [score] | Level: [level] | Lives: [lives] | Alive: [isAlive]

Oczekiwany wynik:

Alex | Score: 250 | Level: 3 | Lives: 3 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 3 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 1 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 1 | Alive: true

Spróbuj swoich sił

import 'player.dart';

void main() {
  // TODO: Utwórz gracza o imieniu 'Alex'

  // TODO: Ustaw wynik na 250 i wywołaj displayStatus()

  // TODO: Spróbuj ustawić wynik na -50 (ta wartość powinna zostać zignorowana) i wywołaj displayStatus()

  // TODO: Ustaw liczbę żyć na 1 i wywołaj displayStatus()

  // TODO: Spróbuj ustawić liczbę żyć na 10 (ta wartość powinna zostać zignorowana) i wywołaj displayStatus()
}
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