Что такое перечисление в языках программирования?

Сокращенно от перечисления, тип переменной enum можно найти в C (ANSI, а не в исходном K&R), C ++ и C #. Идея состоит в том, что вместо использования int для представления набора значений вместо этого используется тип с ограниченным набором значений.

Например, если мы используем цвета радуги:

  1. Red
  2. Orange
  3. Желтый
  4. Зеленый
  5. Синий
  6. Индиго
  7. Фиолетовый

Если перечислений не существует, вы можете использовать #define (в C) или const в C ++/C #, чтобы указать эти значения. Например,

Слишком много Ints, чтобы сосчитать!

Проблема в том, что целых чисел гораздо больше, чем цветов. Если фиолетовый имеет значение 7, а программа присваивает переменной значение 15, то это явно ошибка, но может не быть обнаружена, поскольку 15 является допустимым значением для int.

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

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

Теперь внутри компилятор будет использовать int для их хранения, а если значения не указаны, красный будет 0, оранжевый – 1 и т. д.

Какая польза от Enum?

Дело в том, что rainbowcolors – это тип, и ему могут быть присвоены только другие переменные того же типа. C проще (т. Е. Менее строго типизирован), но C ++ и C # не допускают присвоения, если вы не используете принудительное преобразование.

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

Наличие синего и индиго с одним и тем же значением не ошибка, поскольку счетчики могут включать синонимы, такие как алый и малиновый.

Языковые различия

В C объявление переменной должно быть перед словом enum , как в

Однако в C ++ он не нужен как rainbowcolors – это отдельный тип, которому не нужен префикс типа перечисления.

В C # доступ к значениям осуществляется по имени типа, как в

В чем смысл перечислений?

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

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

  1. Красный – трафик Остановлен.
  2. И красный , и желтый – движение по-прежнему остановлено, но индикатор собирается стать зеленым..
  3. Зеленый – движение может двигаться.
  4. Желтый – предупреждение о неизбежном переходе на красный цвет. .

Пример светофора

Управление освещением осуществляется записью в три нижних бита управляющего байта. . Они представлены ниже в виде битового шаблона в двоичном формате, где RYG представляют три бита. Если R равно 1, горит красный свет и т. Д.

В этом случае легко увидеть, что четыре состояния выше соответствуют значениям 4 = красный горит, 6 = красный + желтый оба горит, 1 = зеленый горит и 2 = Желтый включен.

С этой функцией

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

В C ++ и C # нам нужно создать класс, а затем перегрузить оператор | чтобы разрешить OR-ing типов

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

Чтобы быть уверенным, мы бы замаскировали биты в SetTrafficlights () , поэтому независимо от того, какое значение передается, изменяются только три нижних бита.

Заключение

Перечисления имеют следующие преимущества:

  • Они ограничивают значения, которые может принимать переменная перечисления.
  • Они заставляют задуматься обо всех возможных значениях, которые может принимать перечисление.
  • Они представляют собой константу, а не число, что увеличивает читаемость исходного кода.
Оцените статью
recture.ru
Добавить комментарий