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.
Aufgabe
EinfachErstellen Sie ein Programm, das den Zustand eines Spielcharakters mithilfe von Enums und Switch-Anweisungen verwaltet. Ihre Aufgabe ist es:
- Definieren Sie ein Enum namens
CharacterStatemit den folgenden Werten:idle,walking,running,jumpingundattacking - Erstellen Sie eine Variable namens
currentStatevom TypCharacterStateund weisen Sie ihr den WertCharacterState.idlezu - Erstellen Sie eine Funktion namens
getStateMessage, die einenCharacterState-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 - Geben Sie die initiale Zustandsmeldung unter Verwendung der Funktion im exakten Format aus:
Initial state: Character is standing still - Ändern Sie den
currentStateinCharacterState.walking - Geben Sie die aktualisierte Zustandsmeldung im exakten Format aus:
Updated state: Character is moving slowly - Ändern Sie den
currentStateinCharacterState.attacking - 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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste6Grundlagen der Fehlerbehandlung
Was sind Exceptions?Der 'try-catch'-BlockExceptions mit 'on' abfangenDer 'finally'-BlockEine Exception auslösenRückblick - Sichere Division9Enumerations (Enums)
Was sind Enums?Einfache Enums definierenEnums in Variablen verwendenEnums in 'switch'-AnweisungenZusammenfassung – Ampel