Menu
Coddy logo textTech

Enums in 'switch'-Anweisungen

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 61 von 65.

Eine der leistungsfähigsten Anwendungen von Enums ist deren Verwendung mit switch-Anweisungen. Wenn Sie Enums mit switch-Anweisungen kombinieren, erstellen Sie Code, der sowohl sicherer als auch wartungsfreundlicher ist.

So können Sie ein Enum in einer Switch-Anweisung verwenden:

enum Status {
  pending,
  running,
  completed
}

Status currentStatus = Status.pending;

switch (currentStatus) {
  case Status.pending:
    print('Task is waiting to start');
    break;
  case Status.running:
    print('Task is currently in progress');
    break;
  case Status.completed:
    print('Task has been finished');
    break;
}

Der Vorteil bei der Verwendung von Enums mit switch-Anweisungen besteht darin, dass Dart überprüfen kann, ob Sie alle möglichen Enum-Werte behandelt haben. Wenn Sie vergessen, einen case für einen der Enum-Werte einzufügen, wird Dart Sie warnen, was dazu beiträgt, Fehler in Ihrem Code zu vermeiden.

Dieser Ansatz ist viel sicherer als die Verwendung von Strings oder Zahlen in switch-Anweisungen, bei denen Tippfehler zu unerwartetem Verhalten führen könnten. Mit Enums erhalten Sie eine Überprüfung zur Kompilierzeit, die sicherstellt, dass Ihr Code jedes mögliche Szenario abdeckt.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das den Zustand eines Spielcharakters mithilfe von Enums und Switch-Anweisungen verwaltet. Ihre Aufgabe ist es:

  1. Definieren Sie ein Enum namens CharacterState mit den folgenden Werten: idle, walking, running, jumping und attacking
  2. Erstellen Sie eine Variable namens currentState vom Typ CharacterState und weisen Sie ihr den Wert CharacterState.idle zu
  3. Erstellen Sie eine Funktion namens getStateMessage, die einen CharacterState-Parameter entgegennimmt und basierend auf dem Zustand mittels einer Switch-Anweisung eine String-Nachricht zurückgibt:
    • Für CharacterState.idle: geben Sie "Character is standing still" zurück
    • Für CharacterState.walking: geben Sie "Character is moving slowly" zurück
    • Für CharacterState.running: geben Sie "Character is moving quickly" zurück
    • Für CharacterState.jumping: geben Sie "Character is in the air" zurück
    • Für CharacterState.attacking: geben Sie "Character is fighting" zurück
  4. Geben Sie die initiale Zustandsmeldung unter Verwendung der Funktion im exakten Format aus: Initial state: Character is standing still
  5. Ändern Sie den currentState in CharacterState.walking
  6. Geben Sie die aktualisierte Zustandsmeldung im exakten Format aus: Updated state: Character is moving slowly
  7. Ändern Sie den currentState in CharacterState.attacking
  8. Geben Sie die finale Zustandsmeldung im exakten Format aus: Final state: Character is fighting

Ihr Programm sollte die korrekte Verwendung von Enums mit Switch-Anweisungen demonstrieren und zeigen, wie diese Kombination eine typsichere Zustandsverwaltung ermöglicht. Die Switch-Anweisung muss alle Enum-Werte verarbeiten und die entsprechende Nachricht für jeden Charakterzustand zurückgeben. Achten Sie darauf, die Dart-Namenskonventionen einzuhalten und die oben angegebenen exakten String-Nachrichten zu verwenden.

Spickzettel

Enums funktionieren gut mit switch-Anweisungen für typsicheren Code:

enum Status {
  pending,
  running,
  completed
}

Status currentStatus = Status.pending;

switch (currentStatus) {
  case Status.pending:
    print('Task is waiting to start');
    break;
  case Status.running:
    print('Task is currently in progress');
    break;
  case Status.completed:
    print('Task has been finished');
    break;
}

Dart überprüft, ob alle Enum-Werte in der switch-Anweisung behandelt werden, was Fehler verhindert und eine Überprüfung zur Kompilierzeit ermöglicht.

Probier es selbst

import 'dart:io';

// TODO: Definiere hier dein CharacterState-Enum

// TODO: Erstelle hier deine getStateMessage-Funktion

void main() {
  // TODO: Schreibe deinen Code unten
  
  // Erstelle die Variable currentState und weise ihr CharacterState.idle zu
  
  // Gib die Nachricht für den Anfangszustand aus
  
  // Ändere currentState zu CharacterState.walking
  
  // Gib die aktualisierte Zustandsnachricht aus
  
  // Ändere currentState zu CharacterState.attacking
  
  // Gib die finale Zustandsnachricht aus
}
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 Logik & Ablauf