Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza stanem postaci w grze za pomocą wyliczeń i instrukcji switch. Twoje zadanie:

  1. Zdefiniuj wyliczenie o nazwie CharacterState z następującymi wartościami: idle, walking, running, jumping i attacking
  2. Utwórz zmienną o nazwie currentState typu CharacterState i przypisz jej wartość CharacterState.idle
  3. Utwórz funkcję o nazwie getStateMessage, która przyjmuje parametr typu CharacterState i 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"
  4. Wypisz komunikat o początkowym stanie, używając funkcji i dokładnego formatu: Initial state: Character is standing still
  5. Zmień wartość currentState na CharacterState.walking
  6. Wypisz zaktualizowany komunikat o stanie w dokładnym formacie: Updated state: Character is moving slowly
  7. Zmień wartość currentState na CharacterState.attacking
  8. 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
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Dart online