Общее описание
Во время разработки какой-либо программы часто необходимо использовать некоторый набор сущностей, объединенных одним смыслом. Например, разрабатывая программу, которая может работать со списком задач, мы можем захотеть узнать статус каждой из них. Можно использовать для этого строковые значения, но лучше для этих целей использовать специальный тип данных — перечисление.
Перечисление — это специальный тип данных, множество значений которого представляет собой явно заданный набор идентификаторов. После объявления собственного перечисления разработчик может использовать его наряду с перечислениями, которые уже существуют в языке (наследники типа Перечисление). Для обращения к элементу перечисления следует указать имя самого перечисления и, через точку, требуемый элемент перечисления: имя-перечисления.элемент.
Синтаксис
Синтаксис объявления перечисления:
перечисление имя-перечисления
элемент [умолчание, ]
[элемент, ]
[элемент, ]
...
[метод]
[метод]
;
-
перечисление
Ключевое слово, с помощью которого объявляется перечисление.
-
имя-перечисления
имя-перечисления указывает имя создаваемого перечисления. Это имя в дальнейшем следует указывать в качестве имени типа при объявлении переменных, принимающих значения данного перечисления.
-
элемент
Имена, указанные в синтаксисе как элемент, задают набор уникальных идентификаторов (в рамках этого перечисления), который требуется разработчику. Например, так можно задать перечисление СтатусыЗадач:
пе речисление СтатусыЗадач
Новая,
ВРаботе,
Готово,
Отменена
;
В этом примере значения Новая, ВРаботе, Готово и Отменена — набор уникальных идентификаторов перечисления. В составе перечисления должно быть минимум одно значение.
-
умолчание
Перечисление может обладать единственным значением по умолчанию или вовсе не иметь значения по умолчанию. Значение по умолчанию будет использоваться в том случае, если переменная описывается с типом создаваемого перечисления и для этой переменной не указывается значение инициализации. Значением по умолчанию может быть любой элемент перечисления.
перечисление СтатусыЗадач
Новая умолчание,
ВРаботе,
Готово,
Отменена
;
Кроме того, в перечислении можно указывать простые и статические методы.
перечисление СтатусыЗадач
Новая,
ВРаботе,
Г отово,
Отменена
метод МожноРедактировать(): Булево
выбор этот
когда СтатусыЗадач.Новая, СтатусыЗадач.ВРаботе
возврат Истина
иначе
возврат Ложь
;
;
;
При использовании значения перечисления необходимо указать имя перечисления и конкретное значение перечисления. Разделителем этих идентификаторов служит символ .. Таким образом, если в тексте программы необходимо использовать ссылку на статус задачи ВРаботе, то это нужно будет сделать следующим образом:
Пример использования перечисления
В примере ниже показано использование перечисления СтатусыЗадач для работы со списком задач. Перечисление определяет возможные статусы задач (Новая, ВРаботе, Готово, Отменена) и содержит методы для проверки возможности редактирования и получения описания статуса.
Метод ПримерИспользованияПеречисления() демонстрирует работу со списком задач типа Соответствие<Строка, СтатусыЗадач>, в нем последовательно обрабатываются задачи с изменением их статуса.
перечисление СтатусыЗадач
Новая умолчание,
ВРаботе,
Готово,
Отменена
метод МожноРедактировать(): Булево
выбор этот
когда СтатусыЗадач.Новая, СтатусыЗадач.ВРаботе
возврат Истина
иначе
возврат Ложь
;
;
метод ВОписании(): Строка
выбор этот
когда СтатусыЗадач.Новая
возврат "Новая задача"
когда СтатусыЗадач.ВРаботе
возврат "Задача в работе"
когда СтатусыЗадач.Готово
возврат "Задача выполнена"
когда СтатусыЗадач.Отменена
возврат "Задача отменена"
иначе
возврат "Неизвестный статус"
;
;
;
метод ПримерИспользованияПеречисления(): Строка
пер Задачи = <Строка, СтатусыЗадач>{
"Рефакторинг": СтатусыЗадач.Новая,
"Тестирование": СтатусыЗадач.Новая
}
пер ТекущаяЗадача = Задачи.Получить("Рефакторинг")
пер ТекущийСтатус = ТекущаяЗадача.ВОписании()
если ТекущаяЗадача.МожноРедактировать()
Задачи.Вставить("Рефакторинг", СтатусыЗадач.ВРаботе)
ТекущаяЗадача = Задачи.Получить("Рефакторинг")
ТекущийСтатус = ТекущаяЗадача.ВОписании()
иначе
возврат "Невозможно обновить задачу со статусом $ТекущийСтатус"
;
ТекущаяЗадача = Задачи.Получить("Тестирование")
ТекущийСтатус = ТекущаяЗадача.ВОписании()
если ТекущаяЗадача.МожноРедактировать()
Задачи.Вставить("Тестирование", СтатусыЗадач.Готово)
ТекущаяЗадача = Задачи.Получить("Тестирование")
ТекущийСтатус = ТекущаяЗадача.ВОписании()
иначе
возврат "Невозможно обновить задачу со статусом $ТекущийСтатус"
;
Задачи.Вставить("Внедрение", СтатусыЗадач.Новая)
возврат "Все задачи обработаны. Текущее состояние: $Задачи"
;
Пример использования перечисления в инструкции «выбор»
Значение перечисления без упоминания имени самого перечисления (имени типа) допускается в кратком виде инструкции выбор с выбором из значений перечисления.
перечисление СтатусыЗадач
Новая умолчание,
ВРаботе,
Готово,
Отменена
;
метод ОбработатьЗадачу()
пер ТекущийСтатус: СтатусыЗадач
выбор ТекущийСтатус
когда Новая
когда ВРаботе
когда Готово, Отменена
;
;