Перейти к основному содержимому

Перечисление

Общее описание

Во время разработки какой-либо программы часто необходимо использовать некоторый набор сущностей, объединенных одним смыслом. Например, разрабатывая программу, которая может работать со списком задач, мы можем захотеть узнать статус каждой из них. Можно использовать для этого строковые значения, но лучше для этих целей использовать специальный тип данных — перечисление.

Перечисление — это специальный тип данных, множество значений которого представляет собой явно заданный набор идентификаторов. После объявления собственного перечисления разработчик может использовать его наряду с перечислениями, которые уже существуют в языке (наследники типа Перечисление). Для обращения к элементу перечисления следует указать имя самого перечисления и, через точку, требуемый элемент перечисления: имя-перечисления.элемент.

Синтаксис

Синтаксис объявления перечисления:

перечисление имя-перечисления
элемент [умолчание, ]
[элемент, ]
[элемент, ]
...
[метод]
[метод]
;
  • перечисление

    Ключевое слово, с помощью которого объявляется перечисление.

  • имя-перечисления

    имя-перечисления указывает имя создаваемого перечисления. Это имя в дальнейшем следует указывать в качестве имени типа при объявлении переменных, принимающих значения данного перечисления.

  • элемент

    Имена, указанные в синтаксисе как элемент, задают набор уникальных идентификаторов (в рамках этого перечисления), который требуется разработчику. Например, так можно задать перечисление СтатусыЗадач:

    перечисление СтатусыЗадач
    Новая,
    ВРаботе,
    Готово,
    Отменена
    ;

    В этом примере значения Новая, ВРаботе, Готово и Отменена — набор уникальных идентификаторов перечисления. В составе перечисления должно быть минимум одно значение.

  • умолчание

    Перечисление может обладать единственным значением по умолчанию или вовсе не иметь значения по умолчанию. Значение по умолчанию будет использоваться в том случае, если переменная описывается с типом создаваемого перечисления и для этой переменной не указывается значение инициализации. Значением по умолчанию может быть любой элемент перечисления.

    перечисление СтатусыЗадач
    Новая умолчание,
    ВРаботе,
    Готово,
    Отменена
    ;

Кроме того, в перечислении можно указывать простые и статические методы.

перечисление СтатусыЗадач
Новая,
ВРаботе,
Готово,
Отменена

метод МожноРедактировать(): Булево
выбор этот
когда СтатусыЗадач.Новая, СтатусыЗадач.ВРаботе
возврат Истина
иначе
возврат Ложь
;
;
;

При использовании значения перечисления необходимо указать имя перечисления и конкретное значение перечисления. Разделителем этих идентификаторов служит символ .. Таким образом, если в тексте программы необходимо использовать ссылку на статус задачи ВРаботе, то это нужно будет сделать следующим образом:

СтатусыЗадач.ВРаботе

Пример использования перечисления

В примере ниже показано использование перечисления СтатусыЗадач для работы со списком задач. Перечисление определяет возможные статусы задач (Новая, ВРаботе, Готово, Отменена) и содержит методы для проверки возможности редактирования и получения описания статуса.

Метод ПримерИспользованияПеречисления() демонстрирует работу со списком задач типа Соответствие<Строка, СтатусыЗадач>, в нем последовательно обрабатываются задачи с изменением их статуса.

перечисление СтатусыЗадач
Новая умолчание,
ВРаботе,
Готово,
Отменена

метод МожноРедактировать(): Булево
выбор этот
когда СтатусыЗадач.Новая, СтатусыЗадач.ВРаботе
возврат Истина
иначе
возврат Ложь
;
;

метод ВОписании(): Строка
выбор этот
когда СтатусыЗадач.Новая
возврат "Новая задача"
когда СтатусыЗадач.ВРаботе
возврат "Задача в работе"
когда СтатусыЗадач.Готово
возврат "Задача выполнена"
когда СтатусыЗадач.Отменена
возврат "Задача отменена"
иначе
возврат "Неизвестный статус"
;
;
;

метод ПримерИспользованияПеречисления(): Строка
// Создаем список задач с использованием перечисления СтатусыЗадач
пер Задачи = <Строка, СтатусыЗадач>{
"Рефакторинг": СтатусыЗадач.Новая,
"Тестирование": СтатусыЗадач.Новая
}

// Начинаем обработку задач
пер ТекущаяЗадача = Задачи.Получить("Рефакторинг") // Статус задачи — Новая
пер ТекущийСтатус = ТекущаяЗадача.ВОписании() // Новая задача

если ТекущаяЗадача.МожноРедактировать()
// Обновляем статус текущей задачи
Задачи.Вставить("Рефакторинг", СтатусыЗадач.ВРаботе)
ТекущаяЗадача = Задачи.Получить("Рефакторинг")
ТекущийСтатус = ТекущаяЗадача.ВОписании() // Задача в работе
иначе
возврат "Невозможно обновить задачу со статусом $ТекущийСтатус"
;

// Берем в работу другую задачу
ТекущаяЗадача = Задачи.Получить("Тестирование") // Статус задачи — Новая
ТекущийСтатус = ТекущаяЗадача.ВОписании()

если ТекущаяЗадача.МожноРедактировать()
// Обновляем статус текущей задачи
Задачи.Вставить("Тестирование", СтатусыЗадач.Готово)
ТекущаяЗадача = Задачи.Получить("Тестирование")
ТекущийСтатус = ТекущаяЗадача.ВОписании() // Задача выполнена
иначе
возврат "Невозможно обновить задачу со статусом $ТекущийСтатус"
;

// Добавляем новую задачу в список задач
Задачи.Вставить("Внедрение", СтатусыЗадач.Новая)

возврат "Все задачи обработаны. Текущее состояние: $Задачи" // {Рефакторинг: ВРаботе, Тестирование: Готово, Внедрение: Новая}
;

Пример использования перечисления в инструкции «выбор»

Значение перечисления без упоминания имени самого перечисления (имени типа) допускается в кратком виде инструкции выбор с выбором из значений перечисления.

перечисление СтатусыЗадач
Новая умолчание,
ВРаботе,
Готово,
Отменена
;

метод ОбработатьЗадачу()
пер ТекущийСтатус: СтатусыЗадач

выбор ТекущийСтатус
когда Новая
// Работаем с задачами со статусом Новая
когда ВРаботе
// Работаем с задачами со статусом ВРаботе
когда Готово, Отменена
// Работаем с задачами со статусом Готово или Отменена
;
;