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 вы получаете проверку на этапе компиляции, которая гарантирует, что ваш код обрабатывает все возможные сценарии.
Задание
ЛегкоСоздайте программу, которая управляет состоянием игрового персонажа, используя перечисления (enums) и операторы switch. Ваша задача:
- Определите перечисление с названием
CharacterStateсо следующими значениями:idle,walking,running,jumpingиattacking - Создайте переменную с названием
currentStateтипаCharacterStateи присвойте ей значениеCharacterState.idle - Создайте функцию с названием
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" - Выведите начальное сообщение о состоянии, используя функцию, в точном формате:
Initial state: Character is standing still - Измените
currentStateнаCharacterState.walking - Выведите обновленное сообщение о состоянии в точном формате:
Updated state: Character is moving slowly - Измените
currentStateнаCharacterState.attacking - Выведите финальное сообщение о состоянии в точном формате:
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
// Выведите сообщение о конечном состоянии
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей6Основы обработки ошибок
Что такое исключения?Блок 'try-catch'Перехват исключений с помощью 'on'Блок 'finally'Генерация исключенияИтоги: Безопасное деление9Перечисления (Enums)
Что такое Enums?Определение простого EnumИспользование Enums в переменныхEnums в операторах 'switch'Итоги — Светофор