Enumy w instrukcjach „switch”
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 61 z 65.
Jednym z najpotężniejszych zastosowań typów wyliczeniowych jest używanie ich z instrukcjami switch. Łącząc typy wyliczeniowe z instrukcjami switch, tworzysz kod, który jest zarówno bezpieczniejszy, jak i łatwiejszy w utrzymaniu.
Oto, jak możesz użyć typu wyliczeniowego w instrukcji switch:
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;
}Piękno używania typów wyliczeniowych z instrukcjami switch polega na tym, że Dart może sprawdzić, czy obsłużono wszystkie możliwe wartości typu wyliczeniowego. Jeśli zapomnisz dodać case dla jednej z wartości typu wyliczeniowego, Dart Cię ostrzeże, pomagając zapobiegać błędom w kodzie.
To podejście jest znacznie bezpieczniejsze niż używanie ciągów znaków lub liczb w instrukcjach switch, gdzie literówki mogą powodować nieoczekiwane zachowanie. Dzięki typom wyliczeniowym kompilator sprawdza kod podczas kompilacji, zapewniając, że obsługuje on każdy możliwy scenariusz.
Wyzwanie
ŁatwyUtwórz program, który zarządza stanem postaci w grze za pomocą wyliczeń i instrukcji switch. Twoje zadanie:
- Zdefiniuj wyliczenie o nazwie
CharacterStatez następującymi wartościami:idle,walking,running,jumpingiattacking - Utwórz zmienną o nazwie
currentStatetypuCharacterStatei przypisz jej wartośćCharacterState.idle - Utwórz funkcję o nazwie
getStateMessage, która przyjmuje parametr typuCharacterStatei zwraca komunikat tekstowy na podstawie stanu, używając instrukcji switch: - Dla
CharacterState.idle: zwróć"Character is standing still" - Dla
CharacterState.walking: zwróć"Character is moving slowly" - Dla
CharacterState.running: zwróć"Character is moving quickly" - Dla
CharacterState.jumping: zwróć"Character is in the air" - Dla
CharacterState.attacking: zwróć"Character is fighting" - Wypisz komunikat o początkowym stanie, używając funkcji i dokładnego formatu:
Initial state: Character is standing still - Zmień wartość
currentStatenaCharacterState.walking - Wypisz zaktualizowany komunikat o stanie w dokładnym formacie:
Updated state: Character is moving slowly - Zmień wartość
currentStatenaCharacterState.attacking - Wypisz końcowy komunikat o stanie w dokładnym formacie:
Final state: Character is fighting
Twój program powinien pokazywać prawidłowe użycie wyliczeń z instrukcjami switch, demonstrując, jak to połączenie zapewnia bezpieczne pod względem typów zarządzanie stanem. Instrukcja switch musi obsługiwać wszystkie wartości wyliczenia i zwracać odpowiedni komunikat dla każdego stanu postaci. Pamiętaj o przestrzeganiu konwencji nazewnictwa Dart i użyciu dokładnych komunikatów tekstowych podanych powyżej.
Spróbuj swoich sił
import 'dart:io';
// TODO: Zdefiniuj tutaj enum CharacterState
// TODO: Utwórz tutaj funkcję getStateMessage
void main() {
// TODO: Napisz swój kod poniżej
// Utwórz zmienną currentState i przypisz jej CharacterState.idle
// Wyświetl komunikat o stanie początkowym
// Zmień currentState na CharacterState.walking
// Wyświetl komunikat o zaktualizowanym stanie
// Zmień currentState na CharacterState.attacking
// Wyświetl komunikat o stanie końcowym
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gości6Podstawy obsługi błędów
Czym są wyjątki?Blok „try-catch”Przechwytywanie wyjątków za pomocą „on”Blok „finally”Rzucanie wyjątkuPodsumowanie – bezpieczne dzielenie9Wyliczenia (enumy)
Czym są enumy?Definiowanie prostego enumaUżywanie enumów w zmiennychEnumy w instrukcjach „switch”Podsumowanie – sygnalizacja świetlnaPoćwicz samodzielnie: Kompilator Dart online