Перечисления в языке Перфолента

Материал из ТХАБ.РФ
Версия от 13:09, 5 декабря 2021; Админ (обсуждение | вклад) (Новая страница: «== Отличие Словарей в Питоне от Перечислений в Перволенте.Net, C# == Словари в Python - неупорядо…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Отличие Словарей в Питоне от Перечислений в Перволенте.Net, C#

Словари в Python - неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.

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

Начало

Во многих случаях программисту необходимо использовать в программе наборы заранее заданных значений. Перечисления - это способ записи и использования таких наборов значений.

Придется использовать перечисление ТипыПричесок.

«Синий, красный, голубой, выбирай себе любой.»

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

В старые добрые времена, когда компьютеры были большими, а компиляторы маленькими, значения таких списков представляли числами, а какое число соответствует какому значению записывали на листочке бумаги. При чтении программы часто было трудно понять, что это за числа, поэтому программисты называли их «магические числа».

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

Константа ПОНЕДЕЛЬНИК = 1
Константа ВТОРНИК = 2

… и т.д.

Константа ЯНВАРЬ = 1
Константа ФЕВРАЛЬ = 2

… и т.д.

Это уже даёт возможность писать в программе имена вместо чисел, например, так:

Если Месяц = ЯНВАРЬ Тогда
    // код блока
КонецЕсли

Отлично, но не лишено недостатков.

Первая проблема: по мере того, как констант в вашей программе становится всё больше и больше, становится трудным делом запомнить все их имена. В случае дней недели или месяцев такой проблемы нет, но в случае списка состояний какого-либо объекта или списка специфических параметров эта проблема возникает.

Вторая проблема состоит в том, что среда разработки (IDE) не может Вам подсказать список дней недели, а компилятор не может проверить, не подсунули ли Вы ему вместо января четверг. Становятся необходимостью группировка констант по смыслу и типизация, т.е. включение их в систему типов языка.

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

В результате, во многих языках программирования появился новый тип данных – перечисление, который за счет группировки имен констант по смыслу, типизации и возможной видимости извне, решил выше описанные проблемы.

Перечисление – это тип данных, представляющий именованный список именованных значений.

Синтаксис перечислений

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

Полный синтаксис объявления перечисления выглядит так:

&ВидноВсем
Перечисление ИмяПеречисления тип ТипПеречисления
    ИмяЗначения1 = Значение1
    ИмяЗначения2 = Значение2
    // ...
    ИмяЗначенияН = ЗначениеН
КонецПеречисления

Тип перечисления не может быть любым, т.к. среда выполнения Net ограничивает допустимые типы перечислений списком целых числовых типов: Байт, Целое, Цел8, Цел16, Цел32, Цел64, Бит8, Бит16, Бит32, Бит64.

Если тип перечисления не указан, то по умолчанию используется тип Целое.

Значения задаются числовыми литералами.

Приведём пример перечисления:

Перечисление ТипыПринтеров
    Матричный = 0
    Лазерный = 1
    Струйный = 2
    Другой = 999
КонецПеречисления

Обратите внимание, что в этом примере использовано имя перечисления во множественном числе, а значения перечисления в единственном числе. Такой способ считается предпочтительным, но не обязательным.

Если значение элемента перечисления не указано, то ему автоматически присваивается значение из последовательности, начинающейся с нуля.

Перечисление ТипыПринтеров
    Матричный   // Будет присвоено 0
    Лазерный    // Будет присвоено 1
    Струйный    // Будет присвоено 2
    Другой      // Будет присвоено 3
КонецПеречисления

Блок Перечисление может быть вложен в классы, модули, структуры и интерфейсы. Подробнее о структуре программы можно почитать в статье «Структура программы на языке Перфолента.Net»

Любители записать всё, в компактной форме, в одну строку должны не забывать про разделительные точки с запятой.

Перечисление ДаНет; @Да; @Нет; КонецПеречисления

Обратите внимание, что перед именами Да и Нет, являющимися ключевыми словами языка Перфолента.Net, стоит экранирующий символ @.

Использование перечислений

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

Приведем примеры правильного и не правильного использования перечислений:

ТП = ТипыПринтеров //Ошибка, имя перечисления не может использоваться как значение
МП = ТипыПринтеров.Лазерный //Правильно
ПроверитьПринтер(ТипыПринтеров) //Ошибка
ПроверитьПринтер(Струйный) //Ошибка
ПроверитьПринтер(ТипыПринтеров.Струйный) //Правильно
Процедура ПроверитьПринтер(ТипПринтера тип ТипыПринтеров)
      
      ВыводСтроки "Тип принтера: "+ТипПринтера
      ВыводСтроки "Тип значения: "+ТипЗнчСтр(ТипПринтера)
      
      Выбор Для ТипПринтера
      Когда ТипыПринтеров.Матричный Тогда
          //печатаем на матричном принтере
      Когда ТипыПринтеров.Лазерный Тогда
          //печатаем на лазерный принтере
      Когда ТипыПринтеров.Струйный Тогда
          //печатаем на струйном принтере
      Иначе
          //ошибка, не знаем как печатать на другом принтере 
      КонецВыбора
КонецПроцедуры

Вывод: Перечисления удобны в тех случаях, когда в программе необходимо использовать именованные значения из небольшого, заранее известного списка.

Cм. также


'Показать Содержание Описание языка Перфолента.NET'

Ссылки