Menu
Coddy logo textTech

Enums в операторах 'switch'

Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 61 из 65.

Одним из наиболее мощных способов применения перечислений является их использование с операторами switch. Сочетая перечисления с операторами switch, вы создаете код, который становится одновременно более безопасным и удобным в поддержке.

Вот как можно использовать перечисление (enum) в операторе 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;
}

Преимущество использования перечислений (enums) с операторами switch заключается в том, что Dart может проверить, обработали ли вы все возможные значения перечисления. Если вы забудете включить case для одного из значений перечисления, Dart предупредит вас, помогая предотвратить ошибки в вашем коде.

Этот подход гораздо безопаснее, чем использование строк или чисел в операторах switch, где опечатки могут привести к неожиданному поведению. С enums вы получаете проверку на этапе компиляции, которая гарантирует, что ваш код обрабатывает все возможные сценарии.

challenge icon

Задание

Легко

Создайте программу, которая управляет состоянием игрового персонажа, используя перечисления (enums) и операторы switch. Ваша задача:

  1. Определите перечисление с названием CharacterState со следующими значениями: idle, walking, running, jumping и attacking
  2. Создайте переменную с названием currentState типа CharacterState и присвойте ей значение CharacterState.idle
  3. Создайте функцию с названием getStateMessage, которая принимает параметр CharacterState и возвращает строковое сообщение в зависимости от состояния, используя оператор switch:
    • Для CharacterState.idle: вернуть "Character is standing still"
    • Для CharacterState.walking: вернуть "Character is moving slowly"
    • Для CharacterState.running: вернуть "Character is moving quickly"
    • Для CharacterState.jumping: вернуть "Character is in the air"
    • Для CharacterState.attacking: вернуть "Character is fighting"
  4. Выведите начальное сообщение о состоянии, используя функцию, в точном формате: Initial state: Character is standing still
  5. Измените currentState на CharacterState.walking
  6. Выведите обновленное сообщение о состоянии в точном формате: Updated state: Character is moving slowly
  7. Измените currentState на CharacterState.attacking
  8. Выведите финальное сообщение о состоянии в точном формате: Final state: Character is fighting

Ваша программа должна демонстрировать правильное использование перечислений с операторами switch, показывая, как эта комбинация обеспечивает типобезопасное управление состоянием. Оператор switch должен обрабатывать все значения перечисления и возвращать соответствующее сообщение для каждого состояния персонажа. Обязательно следуйте соглашениям об именовании в Dart и используйте точные строковые сообщения, указанные выше.

Шпаргалка

Перечисления (Enums) хорошо работают с инструкциями 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;
}

Dart проверяет, что все значения перечисления обработаны в инструкции switch, предотвращая ошибки и обеспечивая проверку на этапе компиляции.

Попробуйте сами

import 'dart:io';

// TODO: Определите здесь ваше перечисление CharacterState

// TODO: Создайте здесь вашу функцию getStateMessage

void main() {
  // TODO: Напишите ваш код ниже
  
  // Создайте переменную currentState и присвойте ей значение CharacterState.idle
  
  // Выведите сообщение о начальном состоянии
  
  // Измените currentState на CharacterState.walking
  
  // Выведите сообщение об обновленном состоянии
  
  // Измените currentState на CharacterState.attacking
  
  // Выведите сообщение о конечном состоянии
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком