Hva er en enum i programmeringsspråk?

Kort for oppregning, en enum variabel type finner du i C (ANSI, ikke den opprinnelige K&R), C ++ og C #. Ideen er at i stedet for å bruke en int for å representere et sett med verdier, brukes i stedet en type med et begrenset sett med verdier.

Hvis vi for eksempel bruker regnbuens farger, som er

  1. rød
  2. oransje
  3. Gul
  4. Grønn
  5. Blå
  6. indigo
  7. Violet

Hvis enums ikke eksisterte, kan du bruke a #definere (i C) eller konst i C ++ / C # for å spesifisere disse verdiene. Eg

For mange teller å telle!

Problemet med dette er at det er mange flere ints enn farger. Hvis fiolett har verdien 7, og program tildeler en verdi på 15 til en variabel, da er det tydelig en feil, men kanskje ikke oppdaget ettersom 15 er en gyldig verdi for et int.

Enums to the Rescue

Enum er en brukerdefinert type som består av et sett med navngjorte konstanter kalt enumerators. Regnbuens farger vil bli kartlagt slik:

Nå internt vil kompilatoren bruke en int til å holde disse, og hvis ingen verdier er levert, blir rød 0, oransje er 1 osv.

Poenget er det

instagram viewer
rainbowcolors er en type, og bare andre variabler av samme type kan tilordnes denne. C er enklere å gå (dvs. mindre strengt skrevet), men C ++ og C # tillater ikke tildeling med mindre du tvinger den med en rollebesetning.

Du er ikke fast med disse kompilatoren genererte verdier, kan du tildele dine egne heltallskonstanter til dem som vist her.

Å ha blått og indigo med samme verdi er ikke en feil, da oppregnere kan inkludere synonymer som skarlagensrød og rød.

Språkforskjeller

I C, the variabel erklæring må innledes med ordet enum som i

I C ++ er det imidlertid ikke nødvendig som rainbowcolors er en distinkt type som ikke trenger enum-typen prefiks.

I C # får du tilgang til verdiene av typen navn som i

Hva er poenget med enums?

Ved å bruke enums øker abstraksjonsnivået og lar programmereren tenke på hva verdiene betyr i stedet for å bekymre deg for hvordan de lagres og får tilgang til dem. 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.

  1. rød - Trafikken stoppet.
  2. Både rød og Gul - Trafikken stoppet fremdeles, men lysene skulle endre seg til grønt.
  3. Grønn - Trafikk kan bevege seg.
  4. Gul - Advarsel om overhengende endring til rødt.

Eksempel på trafikklys

Lysene styres ved å skrive til de tre nederste bitene av en kontrollbyte. Disse er lagt ut som et lite mønster nedenfor i binær hvor 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 OR-ing av typer trafikklys.

Ved å bruke enums forhindrer vi at problemer med 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 i normal bruk, ødelegge.

For å være sikker, ville vi maskere bitene i SetTrafficlights ()funksjon så uansett hvilken verdi som sendes inn, er det bare de tre nederste bitene som blir endret.

Konklusjon

Enums har disse fordelene:

  • De begrenser verdiene som enum-variabelen kan ta.
  • De tvinger deg til å tenke på alle mulige verdier som enum kan ta.
  • De er et konstant snarere enn et tall, noe som øker lesbarheten til kildekode