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 kannst du 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 der Verwendung von Enumerationen mit switch-Anweisungen besteht darin, dass Dart überprüfen kann, ob du alle möglichen Enumerationswerte behandelt hast. Wenn du vergisst, einen Fall für einen der Enumerationswerte einzuschließen, wird Dart dich warnen und so dazu beitragen, Fehler in deinem Code zu verhindern.
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
EinfachErstelle ein Programm, das den Zustand einer Spielfigur mithilfe von Enums und switch-Anweisungen verwaltet. Deine Aufgabe ist es:
- Ein Enum namens
CharacterStatemit den folgenden Werten zu definieren:idle,walking,running,jumpingundattacking - Eine Variable namens
currentStatevom TypCharacterStatezu erstellen und ihr den WertCharacterState.idlezuzuweisen - Eine Funktion namens
getStateMessagezu erstellen, die einen Parameter vom TypCharacterStateentgegennimmt und mithilfe einer switch-Anweisung eine Textmeldung basierend auf dem Zustand zurückgibt: - Für
CharacterState.idle:"Character is standing still"zurückgeben - Für
CharacterState.walking:"Character is moving slowly"zurückgeben - Für
CharacterState.running:"Character is moving quickly"zurückgeben - Für
CharacterState.jumping:"Character is in the air"zurückgeben - Für
CharacterState.attacking:"Character is fighting"zurückgeben - Die Meldung des Anfangszustands mithilfe der Funktion im exakten Format auszugeben:
Initial state: Character is standing still - Den Wert von
currentStateinCharacterState.walkingzu ändern - Die aktualisierte Zustandsmeldung im exakten Format auszugeben:
Updated state: Character is moving slowly - Den Wert von
currentStateinCharacterState.attackingzu ändern - Die Meldung des Endzustands im exakten Format auszugeben:
Final state: Character is fighting
Dein 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 behandeln und für jeden Zustand der Spielfigur die entsprechende Meldung zurückgeben. Achte darauf, die Dart-Namenskonventionen zu befolgen und die oben angegebenen exakten Textmeldungen zu verwenden.
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Übe selbstständig: Online-Dart-Compiler