Какво е Enum в езиците за програмиране?

Съкратено за изброяване, enum променлив тип може да се намери в C (ANSI, не в оригиналния K&R), C ++ и ° С#. Идеята е, че вместо да използвате инт за представяне на набор от стойности, вместо това се използва тип с ограничен набор от стойности.

Например, ако използваме цветовете на дъгата, които са

  1. червен
  2. оранжев
  3. жълт
  4. зелен
  5. Син
  6. индиго
  7. виолетов

Ако не съществуват суми, може да използвате a #define (в С) или конст в C ++ / C #, за да посочите тези стойности. Напр

Прекалено много инти за броене!

Проблемът с това е, че има много повече целочислени отколкото цветове. Ако виолетовият има стойността 7 и програма присвоява стойност на 15 на променлива, тогава тя очевидно е грешка, но може да не бъде открита, тъй като 15 е валидна стойност за един int.

Енум към Спасението

Enum е определен от потребителя тип, състоящ се от набор от именани константи, наречени изброители. Цветовете на дъгата ще бъдат картографирани така:

Сега вътрешно, компилаторът ще използва int, за да ги задържи и ако не се предоставят стойности, червеното ще бъде 0, оранжевото е 1 и т.н.

instagram viewer

Въпросът е в това rainbowcolors е тип и само други променливи от същия тип могат да бъдат присвоени на това. C преминава по-лесно (т.е. по-малко строго набран), но C ++ и C # няма да позволят назначаване, освен ако не го форсирате с помощта на гласове.

Не сте останали с тях съставител генерирани стойности, можете да им зададете собствена цялостна константа, както е показано тук.

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

Езикови разлики

В C, the променлив декларацията трябва да се предхожда от думата ENUM както в

В C ++ обаче не е необходимо като rainbowcolors е отделен тип, който не се нуждае от префикс тип enum.

В C # стойностите се получават от името на типа, както в

Каква е точката на енумите?

Използването на enums увеличава нивото на абстракция и позволява на програмиста да мисли какво означават стойностите, а не да се тревожи за това как се съхраняват и достъпът им. Това намалява появата на бъгове.

Ето един пример. Имаме комплект светофари с три крушки- червен, жълт и зелен. Във Великобритания последователността на светофарите се променя в тези четири фази.

  1. червен - Трафикът е спрян.
  2. И двете червен и жълт - Трафикът все още е спрян, но светлините на път да се променят в зелени.
  3. зелен - Трафикът може да се движи.
  4. жълт - Предупреждение за предстояща промяна в червено.

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

Светлините се управляват, като се запишат на долните три бита на контролен байт. Те са изложени като битов модел по-долу в двоичен код, където RYG представляват трите бита. Ако R е 1, червената светлина свети и т.н.

В този случай е лесно да се види, че четирите състояния по-горе съответстват на стойности 4 = червен на, 6 = червен + жълт и двете, 1 = зелен на и 2 = жълт На.

С тази функция

Използване на клас вместо Enums

В C ++ и C # ще трябва да създадем клас и след това свръхтовар операторът | позволявам OR-позиция от видове светофар.

Използвайки enums, ние предотвратяваме проблемите с други битове да бъдат присвоени на байта за контрол на крушката. Възможно е някои от другите битове да контролират самопроверка или превключвател „Зелена лента“. В този случай грешка, която позволява да се зададат тези битове при нормална употреба, може да доведе до хаос.

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

заключение

Енумите имат тези предимства:

  • Те ограничават стойностите, които променливата enum може да приеме.
  • Принуждават ви да помислите за всички възможни стойности, които може да приеме енумът.
  • Те са константа, а не число, което увеличава четимостта на програмен код
instagram story viewer