Enums in 'switch'-Anweisungen
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy. Lektion 61 von 65.
Eine der leistungsstärksten Anwendungen von Enums ist ihre Verwendung mit switch-Anweisungen. Wenn du Enums mit switch-Anweisungen kombinierst, schreibst du Code, der sowohl sicherer als auch einfacher zu warten 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 Enums mit switch-Anweisungen besteht darin, dass Dart überprüfen kann, ob du alle möglichen Enum-Werte behandelt hast. Wenn du vergisst, einen Fall für einen der Enum-Werte aufzunehmen, wird das Programm nicht kompiliert, bis du ihn behandelst (oder einen default-Fall hinzufügst). So lassen sich Fehler in deinem Code vermeiden.
Dieser Ansatz ist viel sicherer als die Verwendung von Zeichenketten oder Zahlen in switch-Anweisungen, bei denen Tippfehler zu unerwartetem Verhalten führen könnten. Mit Enums erhältst du eine Prüfung zur Kompilierzeit, die sicherstellt, dass dein Code jedes mögliche Szenario behandelt.
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 abhängig vom Zustand eine Meldung als Zeichenfolge 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 zum Anfangszustand mithilfe der Funktion in genau diesem Format ausgeben:
Initial state: Character is standing still currentStateinCharacterState.walkingändern- Die aktualisierte Zustandsmeldung in genau diesem Format ausgeben:
Updated state: Character is moving slowly currentStateinCharacterState.attackingändern- Die abschließende Zustandsmeldung in genau diesem Format ausgeben:
Final state: Character is fighting
Dein Programm sollte die korrekte Verwendung von Enums mit switch-Anweisungen veranschaulichen 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 passende Meldung zurückgeben. Achte darauf, die Dart-Namenskonventionen einzuhalten und genau die oben angegebenen Zeichenfolgen 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 anfängliche Zustandsmeldung aus
// Setze currentState auf CharacterState.walking
// Gib die aktualisierte Zustandsmeldung aus
// Setze currentState auf CharacterState.attacking
// Gib die abschließende Zustandsmeldung 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