Hva er en enum i programmeringsspråk?
Richard Drury/Iconica/Getty Images
En forkortelse for enumeration, en enum variabel type kan finnes i C (ANSI, ikke den originale K&R), C++ ogC#. Tanken er at i stedet for å bruke en int for å representere et sett med verdier, brukes en type med et begrenset sett med verdier i stedet.
For eksempel hvis vi bruker regnbuens farger, som er
- rød
- oransje
- Gul
- Grønn
- Blå
- Indigo
- Fiolett
Hvis enums ikke fantes, kan du bruke en #definere (i C) eller konst i C++/C# for å spesifisere disse verdiene. F.eks
For mange intet å telle!
Problemet med dette er at det er mange flere ints enn farger. Hvis fiolett har verdien 7, og program tilordner en verdi på 15 til en variabel, så er det helt klart en feil, men kan kanskje ikke oppdages ettersom 15 er en gyldig verdi for en int.
Enums til unnsetning
En enum er en brukerdefinert type som består av et sett med navngitte konstanter kalt tellere. Regnbuens farger vil bli kartlagt slik:
Nå internt vil kompilatoren bruke en int for å holde disse, og hvis ingen verdier er oppgitt, vil rødt være 0, oransje er 1 osv.
Hva er fordelen med en Enum?
Poenget er det regnbuefarger er en type og kun andre variabler av samme type kan tilordnes denne. C er lettere å gå (dvs. mindre strengt skrevet), men C++ og C# vil ikke tillate tildeling med mindre du tvinger det ved å bruke en cast.
Du sitter ikke fast med disse kompilator genererte verdier, kan du tilordne din egen heltallskonstant til dem som vist her.
Å ha blått og indigo med samme verdi er ikke en feil, da tellere kan inkludere synonymer som skarlagenrød og karmosinrød.
Språkforskjeller
I C, den variabel erklæring må innledes med ordet enum som i
I C++ er det imidlertid ikke nødvendig som regnbuefarger er en distinkt type som ikke trenger enum type prefiks.
I C# får du tilgang til verdiene med typenavnet som i
Hva er poenget med enums?
Bruk av enums øker abstraksjonsnivået og lar programmereren tenke på hva verdiene betyr i stedet for å bekymre seg for hvordan de lagres og åpnes. Dette reduserer forekomsten av feil.
Her er et eksempel. Vi har et sett med trafikklys med tre pærer- rød , gul og grønn . I Storbritannia endres sekvensen av trafikklys i disse fire fasene.
- Både rød og Gul - Trafikken har fortsatt stanset, men lysene er i ferd med å skifte til grønt.
- De begrenser verdiene som enum-variabelen kan ta.
- De tvinger deg til å tenke på alle mulige verdier som enumen kan ta.
- De er en konstant snarere enn et tall, noe som øker lesbarheten til kildekode
Eksempel på trafikklys
Lysene styres ved å skrive til de tre nederste bitene i en kontrollbyte. Disse er lagt ut som et bitmønster nedenfor i binært format der RYG representerer de tre bitene. Hvis R er 1, lyser det røde lyset osv.
I dette tilfellet er det lett å se at de fire tilstandene ovenfor tilsvarer verdiene 4 = rød på, 6= rød + Gul begge på, 1 = Grønn på og 2 = Gul på.
Med denne funksjonen
Bruke en klasse i stedet for enums
I C++ og C# må vi lage en klasse og deretter overbelastning operatøren | å tillate ELLER-ing av typer trafikklys .
Ved å bruke enums forhindrer vi problemer med at andre biter blir tilordnet pærekontrollbyten. Det kan være at noen av de andre bitene kontrollerer selvtesting eller en 'Green Lane'-bryter. I så fall kan en feil som gjør at disse bitene kan settes ved normal bruk, skape kaos.
For å være sikker, vil vi maskere bitene i SetTrafficlights() funksjon så uansett hvilken verdi som sendes inn, endres bare de tre nederste bitene.
Konklusjon
Enums har disse fordelene: