Menu
Coddy logo textTech

Getter und Setter

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 21 von 110.

Getter und Setter bieten eine Möglichkeit, auf Klassenfelder über spezielle Methoden zuzugreifen und diese zu ändern, die wie reguläre Eigenschaften aussehen. Anstatt Felder direkt offenzulegen, können Sie steuern, wie Werte gelesen und geschrieben werden.

Ein Getter wird mit dem Schlüsselwort get definiert und gibt einen berechneten oder gespeicherten Wert zurück:

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

Beachten Sie, dass auf area und perimeter wie auf Felder zugegriffen wird, sie aber jedes Mal neu berechnet werden. Keine Klammern erforderlich.

Ein Setter verwendet das Schlüsselwort set und ermöglicht es Ihnen zu steuern, wie ein Wert zugewiesen wird:

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

Der Setter validiert die Eingabe, bevor er sie speichert, und kann sogar zwischen Einheiten umrechnen. Dies gibt Ihnen die Kontrolle über Ihre Daten, während eine saubere, eigenschaftsähnliche Syntax für die Benutzer Ihrer Klasse beibehalten wird.

challenge icon

Aufgabe

Einfach

Erstellen wir einen Punktestand-Tracker für ein Spiel, der Getter und Setter verwendet, um Spielerstatistiken mit Validierung und berechneten Werten zu verwalten.

Du organisierst deinen Code in zwei Dateien:

  • player.dart: Definiere eine Player-Klasse, die die Spielleistung eines Spielers verfolgt. Deine Klasse sollte Folgendes enthalten:
    • Ein String name-Feld für den Namen des Spielers
    • Ein privates int _score-Feld, das mit 0 beginnt
    • Ein privates int _lives-Feld, das mit 3 beginnt
    • Einen Konstruktor, der den Namen des Spielers entgegennimmt
    • Einen Getter score, der den aktuellen Punktestand zurückgibt
    • Einen Setter score, der nur Werte größer oder gleich 0 akzeptiert (negative Werte ignorieren)
    • Einen Getter lives, der die verbleibenden Leben zurückgibt
    • Einen Setter lives, der nur Werte zwischen 0 und 5 einschließlich akzeptiert (Werte außerhalb dieses Bereichs ignorieren)
    • Einen Getter level, der das Level des Spielers anhand des Punktestands berechnet: Punktestand geteilt durch 100 (Ganzzahldivision), plus 1
    • Einen Getter isAlive, der true zurückgibt, wenn die Anzahl der Leben größer als 0 ist
    • Eine displayStatus()-Methode, die den aktuellen Status des Spielers ausgibt
  • main.dart: Importiere deine Spielerlklasse und demonstriere die Getter und Setter:
    • Erstelle einen Spieler namens 'Alex'
    • Setze den Punktestand auf 250 und rufe displayStatus() auf
    • Versuche, den Punktestand auf -50 zu setzen (sollte ignoriert werden), und rufe displayStatus() auf
    • Setze die Leben auf 1 und rufe displayStatus() auf
    • Versuche, die Leben auf 10 zu setzen (sollte ignoriert werden), und rufe displayStatus() auf

Die displayStatus()-Methode sollte in genau diesem Format ausgeben:

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

Erwartete Ausgabe:

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

Probier es selbst

import 'player.dart';

void main() {
  // TODO: Erstelle einen Spieler namens 'Alex'

  // TODO: Setze den score auf 250 und rufe displayStatus() auf

  // TODO: Versuche, den score auf -50 zu setzen (sollte ignoriert werden) und rufe displayStatus() auf

  // TODO: Setze lives auf 1 und rufe displayStatus() auf

  // TODO: Versuche, lives auf 10 zu setzen (sollte ignoriert werden) und rufe displayStatus() auf
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Dart-Compiler