Kas yra Enum programavimo kalbose?
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
- Raudona
- Oranžinė
- Geltona
- Žalias
- Mėlyna
- Indigo
- 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.
- Abu Raudona ir Geltona - Eismas vis dar sustojo, bet šviesoforo šviesa persijungs į žalią.
- 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
Š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: