Kas yra Enum programavimo kalbose?

Jaunas vyras sėdi prie kompiuterio

Richardas Drury / Iconica / Getty Images





Išvardijimo trumpinys, enum kintamasis tipas galima rasti C (ANSI, o ne originaliame K&R), C++ irC#. Idėja yra ta, kad užuot naudoję tarpt reikšmių rinkiniui pavaizduoti naudojamas tipas su ribotu reikšmių rinkiniu.

Pavyzdžiui, jei naudosime vaivorykštės spalvas, kurios yra



  1. Raudona
  2. Oranžinė
  3. Geltona
  4. Žalias
  5. Mėlyna
  6. Indigo
  7. Violetinė

Jei enums neegzistavo, galite naudoti a #apibrėžti (C) arba konst C++/C#, kad nurodytumėte šias reikšmes. Pvz

Per daug tarpų, kad būtų galima suskaičiuoti!

Problema ta, kad jų yra daug daugiau tarpt nei spalvos. Jei violetinė vertė yra 7, ir programa kintamajam priskiria 15 reikšmę, tai aiškiai yra klaida, bet gali būti neaptikta, nes 15 yra tinkama int reikšmė.



Enums į gelbėjimą

Sąrašas yra vartotojo apibrėžtas tipas, susidedantis iš įvardytų konstantų, vadinamų skaitikliais, rinkinio. Vaivorykštės spalvos būtų susietos taip.:

Dabar viduje kompiliatorius naudos int, kad juos išlaikytų, o jei nepateiktos jokios reikšmės, raudona bus 0, oranžinė yra 1 ir tt.

Kokia yra Enum nauda?

Esmė ta vaivorykštės spalvos yra tipas ir jam gali būti priskirti tik kiti to paties tipo kintamieji. C yra lengvesnis (ty ne taip griežtai spausdinamas), bet C++ ir C# neleis priskirti, nebent priverstumėte tai padaryti naudodami atmetimą.

Jūs nesate įstrigę su šiais dalykais kompiliatorius sugeneruotas vertes, galite joms priskirti savo sveikųjų skaičių konstantą, kaip parodyta čia.



Mėlynos ir indigo spalvos su ta pačia verte nėra klaida, nes surašytojai gali įtraukti sinonimus, tokius kaip raudona ir tamsiai raudona.

Kalbos skirtumai

C, kintamasis prieš pareiškimą turi būti žodis enum kaip ir



Tačiau C++ jis nereikalingas kaip vaivorykštės spalvos yra atskiras tipas, kuriam nereikia enum tipo priešdėlio.

C# vertės pasiekiamos naudojant tipo pavadinimą, kaip nurodyta



Kas yra Enumo esmė?

Naudojant enumas padidinamas abstrakcijos lygis ir programuotojas gali galvoti apie tai, ką reiškia reikšmės, o ne jaudintis dėl to, kaip jos yra saugomos ir pasiekiamos. Tai sumažina klaidų atsiradimą.

Štai pavyzdys. Turime šviesoforų komplektą su trimis lemputėmis- raudona , geltona ir žalias . Jungtinėje Karalystėje šviesoforų seka keičiasi šiose keturiose fazėse.



    Raudona- Eismas sustabdytas.
  1. Abu Raudona ir Geltona - Eismas vis dar sustojo, bet šviesoforo šviesa persijungs į žalią.
  2. Žalias- Eismas gali judėti.Geltona- Įspėjimas apie neišvengiamą raudonos spalvos pasikeitimą.

Šviesoforo pavyzdys

Šviesos valdomos rašant į apatinius tris valdymo baito bitus. Jie yra išdėstyti kaip bitų šablonas žemiau dvejetainiu formatu, kur RYG reiškia tris bitus. Jei R yra 1, dega raudona lemputė ir pan.

Šiuo atveju nesunku pastebėti, kad keturios aukščiau pateiktos būsenos atitinka reikšmes 4 = Raudona įjungta, 6= Raudona + Geltona abu įjungti, 1 = Žalias įjungta ir 2 = Geltona įjungta.

Su šia funkcija

Klasės naudojimas vietoj Enums

C++ ir C# turėtume sukurti klasę ir tada perkrova operatorius | leisti O ziedas rūšių šviesoforas .

Naudodami enumus išvengiame problemų, susijusių su kitų bitų priskyrimu lemputės valdymo baitui. Gali būti, kad kai kurie kiti bitai valdo savęs patikrinimą arba „Žaliosios juostos“ jungiklį. Tokiu atveju klaida, leidžianti šiuos bitus nustatyti įprastai naudojant, gali sukelti sumaištį.

Kad būtume tikri, užmaskuotume daleles SetTrafficlights () funkcija taigi, nesvarbu, kokia reikšmė perduodama, keičiami tik trys apatiniai bitai.

Išvada

Enumai turi šiuos privalumus:

  • Jie riboja reikšmes, kurias gali priimti enum kintamasis.
  • Jie verčia susimąstyti apie visas galimas enum vertes.
  • Jie yra konstanta, o ne skaičius, todėl padidėja skaitomumas pirminis kodas