Čo je Enum v programovacích jazykoch?
Richard Drury/Iconica/Getty Images
Skratka pre enumeráciu, enum variabilný typ možno nájsť v C (ANSI, nie pôvodné K&R), C++ aC#. Myšlienka je, že namiesto použitia an int na reprezentáciu množiny hodnôt sa namiesto toho používa typ s obmedzenou množinou hodnôt.
Napríklad, ak použijeme farby dúhy, ktoré sú
- Červená
- Oranžová
- žltá
- zelená
- Modrá
- Indigo
- fialový
Ak enumy neexistovali, môžete použiť a #definovať (v C) príp konšt v C++/C# špecifikovať tieto hodnoty. Napr
Príliš veľa int na počítanie!
Problém je v tom, že je ich oveľa viac ints než farby. Ak má fialová hodnotu 7, a program priradí premennej hodnotu 15, potom ide jednoznačne o chybu, ale nemusí byť zistená, pretože 15 je platná hodnota pre int.
Enumy na záchranu
Enum je používateľom definovaný typ pozostávajúci zo sady pomenovaných konštánt nazývaných enumerátory. Farby dúhy by boli zmapované takto:
Teraz interne kompilátor použije na ich uloženie int a ak nie sú zadané žiadne hodnoty, červená bude 0, oranžová je 1 atď.
Aký je prínos enum?
Ide o to, že dúhové farby je typ a možno k nemu priradiť iba iné premenné rovnakého typu. C je jednoduchšie (tj menej prísne napísané), ale C++ a C# neumožnia priradenie, pokiaľ si to nevynútite použitím obsadenia.
Nie ste prilepení na tieto kompilátor vygenerované hodnoty, môžete im priradiť vlastnú celočíselnú konštantu, ako je znázornené tu.
Mať modrú a indigovú s rovnakou hodnotou nie je chyba, pretože čítači môžu zahŕňať synonymá ako šarlátová a karmínová.
Jazykové rozdiely
V C, premenlivý vyhlásenie musí predchádzať slovo enum ako v
V C++ to však nie je potrebné ako dúhové farby je odlišný typ, ktorý nepotrebuje predponu typu enum.
V C# sú hodnoty prístupné podľa názvu typu ako v
Aký je zmysel enumov?
Používanie enumov zvyšuje úroveň abstrakcie a umožňuje programátorovi premýšľať o tom, čo hodnoty znamenajú, namiesto toho, aby sa staral o to, ako sú uložené a prístupné. Tým sa znižuje výskyt chýb.
Tu je príklad. Máme sadu semaforov s tromi žiarovkami- červená , žltá a zelená . V Spojenom kráľovstve sa poradie semaforov mení v týchto štyroch fázach.
- Obaja Červená a žltá - Doprava stále zastavená, ale svetlá sa čoskoro zmenia na zelenú.
- Obmedzujú hodnoty, ktoré môže premenná enum nadobudnúť.
- Nútia vás zamyslieť sa nad všetkými možnými hodnotami, ktoré môže enum nadobudnúť.
- Sú konštantné a nie číslo, čím sa zvyšuje čitateľnosť zdrojový kód
Príklad semaforu
Svetlá sa ovládajú zápisom do spodných troch bitov riadiaceho bajtu. Tie sú rozložené ako bitový vzor nižšie v binárnom formáte, kde RYG predstavujú tri bity. Ak je R 1, svieti červené svetlo atď.
V tomto prípade je ľahké vidieť, že štyri vyššie uvedené stavy zodpovedajú hodnotám 4 = Červená zapnuté, 6= Červená + žltá obaja na, 1 = zelená na a 2 = žltá na.
S touto funkciou
Použitie triedy namiesto Enumov
V C++ a C# by sme potrebovali vytvoriť triedu a potom preťaženie prevádzkovateľ | dovoliť O krúžok typov semafory .
Použitím enumov predchádzame problémom s priraďovaním iných bitov k riadiacemu bajtu žiarovky. Je možné, že niektoré ďalšie bity riadia samočinné testovanie alebo prepínač „Green Lane“. V takom prípade by chyba, ktorá umožňuje nastavenie týchto bitov pri bežnom používaní, mohla spôsobiť zmätok.
Pre istotu by sme zamaskovali kúsky v SetTrafficlights() funkciu takže bez ohľadu na to, aká hodnota sa odovzdá, zmenia sa iba spodné tri bity.
Záver
Enumy majú tieto výhody: