Skratka na vymenovanie, vymenovanie variabilný typ nájdete v C (ANSI, nie v pôvodnom K&R), C ++ a C #. Ide o to, že namiesto použitia 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 výčty neexistovali, môžete použiť #define (v C) alebo const v C ++ / C # na určenie týchto hodnôt. napr
Príliš veľa Ints na počítanie!
Problém je v tom, že je ich omnoho viac ints ako farby. Ak má fialová hodnota 7, a program priradí premennej hodnotu 15, potom je to jednoznačne chyba, ale nemusí sa detegovať, pretože 15 je platná hodnota pre int.
Zoznamy pre záchranu
Výčet je typ definovaný používateľom, ktorý sa skladá zo sady pomenovaných konštánt nazývaných enumerátory. Farby dúhy by sa zmapovali takto:
Teraz interne kompilátor použije int na ich uchovanie a ak nebudú dodané žiadne hodnoty, červená bude 0, oranžová je 1 atď.
Ide o to rainbowcolors je typ a k tomu možno priradiť iba iné premenné toho istého typu. C je jednoduchšie (tj menej prísne napísané), ale C ++ a C # neumožňujú priradenie, pokiaľ ho nenútíte pomocou obsadenia.
Nie ste s nimi spokojní prekladač generované hodnoty, môžete im priradiť svoju vlastnú celočíselnú konštantu, ako je to znázornené tu.
Mať modrú a indigovú farbu s rovnakou hodnotou nie je chyba, pretože čitatelia môžu zahŕňať synonymá ako šarlátový a karmínový.
Jazykové rozdiely
V C, premenlivý pred vyhlásením musí byť uvedené slovo enum ako v
V C ++ to však nie je potrebné rainbowcolors je odlišný typ, ktorý nevyžaduje predponu typu enum.
V C # sú hodnoty prístupné podľa názvu typu ako v
Čo je to bod výčtu?
Použitie výčnelkov zvyšuje úroveň abstrakcie a umožňuje programátorovi premýšľať o tom, čo znamenajú hodnoty, namiesto toho, aby sa museli starať o to, ako sú uložené a ako sa k nim pristupuje. Tým sa znižuje výskyt chýb.
Tu je príklad. Máme sadu semaforov s tromi žiarovkami- červená, žltá a zelená. Vo Veľkej Británii sa sled semaforov mení v týchto štyroch fázach.
- červená - Premávka bola zastavená.
- oba červená a žltá - Premávka Stále zastavená, ale svetlá sa chystajú zmeniť na zelenú.
- zelená - Premávka sa môže pohybovať.
- žltá - Varovanie pred bezprostrednou zmenou na červenú.
Príklad semafora
Svetlá sú ovládané zápisom na spodné tri bity riadiaceho bajtu. Tieto 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 vyššie uvedené štyri stavy zodpovedajú hodnotám 4 = červená dňa, 6 = červená + žltá oboje, 1 = zelená a 2 = žltá ďalej.
S touto funkciou
Použitie triedy namiesto výčtu
V C ++ a C # by sme museli vytvoriť triedu a potom preťaženie prevádzkovateľ dovoliť O krúžok typov semafory.
Použitím výčtu zabránime problémom s priradením ďalších bitov k kontrolnému bajtu žiarovky. Môže sa stať, že niektoré ďalšie bity kontrolujú autotestovanie alebo prepínač „Green Lane“. V takom prípade by chyba, ktorá umožňuje nastavenie týchto bitov pri normálnom použití, mohla spôsobiť zmätok.
Mali by sme si byť istí, že by sme maskovali bity v SetTrafficlights ()funkcie takže bez ohľadu na to, aká hodnota je odovzdaná, zmenili sa iba spodné tri bity.
záver
Výslovníci majú tieto výhody:
- Obmedzujú hodnoty, ktoré môže mať premenná enum.
- Núti vás premýšľať o všetkých možných hodnotách, ktoré enum môže mať.
- Sú skôr konštantou ako počtom, čím sa zvyšuje čitateľnosť zdrojový kód