Vad är en enum i programmeringsspråk?

click fraud protection

Kort för uppräkning, en enum variabel typ kan hittas i C (ANSI, inte det ursprungliga K&R), C ++ och C #. Tanken är att istället för att använda en int för att representera en uppsättning värden används en typ med en begränsad uppsättning värden istället.

Om vi ​​till exempel använder regnbågens färger, som är

  1. Röd
  2. Orange
  3. Gul
  4. Grön
  5. Blå
  6. Indigo
  7. Violett

Om det inte fanns enums kan du använda a #definiera (i C) eller const i C ++ / C # för att ange dessa värden. T.ex

För många ints att räkna!

Problemet med detta är att det finns många fler ints än färger. Om violetten har värdet 7 och program tilldelar ett värde 15 till en variabel är det uppenbarligen ett fel men kanske inte upptäcks eftersom 15 är ett giltigt värde för en int.

Enums to the Rescue

Enum är en användardefinierad typ som består av en uppsättning av namngivna konstanter som kallas enumerators. Regnbågens färger skulle kartläggas så här:

Nu internt kommer kompilatorn att använda en int för att hålla dessa och om inga värden tillhandahålls blir röd 0, orange är 1 etc.

instagram viewer

Poängen är att rainbowcolors är en typ och endast andra variabler av samma typ kan tilldelas detta. C är lättare att gå (dvs mindre strikt typ), men C ++ och C # tillåter inte tilldelning om du inte tvingar det med hjälp av en roll.

Du är inte fast med dessa kompilator genererade värden kan du tilldela ditt eget heltalskonstant till dem som visas här.

Att ha blått och indigo med samma värde är inte ett misstag eftersom uppräknare kan innehålla synonymer som skarlakansröd och röd.

Språkskillnader

I C, variabel deklarationen måste föregås av ordet enum som i

Men i C ++ behövs det inte rainbowcolors är en distinkt typ som inte behöver prefixet av enumtyp.

I C # får man tillgång till värden med typnamnet som i

Vad är poängen med enums?

Genom att använda enums ökar abstraktionsnivån och låter programmeraren fundera över vad värdena betyder snarare än att oroa sig för hur de lagras och nås. Detta minskar förekomsten av buggar.

Här är ett exempel. Vi har en uppsättning trafikljus med tre glödlampor- röd, gul och grön. I Storbritannien förändras sekvensen av trafikljus i dessa fyra faser.

  1. Röd - Trafiken stoppad.
  2. Både Röd och Gul - Trafiken stannade fortfarande, men lamporna håller på att ändras till grönt.
  3. Grön - Trafiken kan röra sig.
  4. Gul - Varning för överhängande förändring till rött.

Exempel på trafikljus

Ljusen styrs genom att skriva till de tre nedre bitarna av en kontrollbyte. Dessa läggs ut som ett bitmönster nedan i binär där RYG representerar de tre bitarna. Om R är 1 lyser den röda lampan etc.

I det här fallet är det lätt att se att de fyra tillstånden ovan motsvarar värden 4 = Röd på, 6 = Röd + Gul båda på, 1 = Grön på och 2 = Gul på.

Med den här funktionen

Att använda en klass istället för enums

I C ++ och C # skulle vi behöva skapa en klass och sedan överbelastning operatören | att tillåta OR-ing av typer trafikljus.

Genom att använda enums förhindrar vi att problem med andra bitar tilldelas bulbkontrollbyten. Det kan vara så att några av de andra bitarna kontrollerar självtest eller en "Green Lane" -brytare. I så fall kan ett fel som låter dessa bitar ställas in vid normal användning orsaka förödelse.

För att vara säker, skulle vi maskera bitarna i SetTrafficlights ()fungera så oavsett vilket värde som matas in ändras bara de tre nedre bitarna.

Slutsats

Enums har dessa fördelar:

  • De begränsar de värden som enum-variabeln kan ta.
  • De tvingar dig att tänka på alla möjliga värden som enum kan ta.
  • De är ett konstant snarare än ett antal, vilket ökar läsbarheten för källkod
instagram story viewer