Rövid a felsorolásra, egy enum változó típus megtalálható a C (ANSI, nem az eredeti K&R), C ++ és C #. Az ötlet az, hogy a int az értékhalmaz ábrázolására egy korlátozott értékhalmaztípust használunk.
Például, ha a szivárvány színeit használjuk, amelyek a következők
- Piros
- narancssárga
- Sárga
- Zöld
- Kék
- Indigó
- Ibolya
Ha nem léteztek enumok, akkor használhatja a #define (C-ben) vagy const a C ++ / C # alatt ezeket az értékeket adja meg. Például
Túl sok pénz számít!
Ennek problémája az, hogy még sok más létezik ints mint a színek. Ha az ibolya értéke 7, és a program egy változóhoz 15 értéket rendel, akkor egyértelműen hiba, de előfordulhat, hogy nem észlelhető, mivel a 15 egy érvényes érték egy int számára.
Enumák a mentőnek
Az enum egy felhasználó által definiált típus, amely egy megnevezett konstans halmazból áll, amelyeket felsorolóknak hívnak. A szivárvány színei így kerülnek feltérképezésre:
Most a belső fordító ezeket int tárolja, és ha nem adnak meg értékeket, a piros 0, narancssárga 1 stb.
A lényeg az
rainbowcolors egy típus, és csak azonos típusú más változók rendelhetők hozzá. A C könnyebben megy végbe (azaz kevésbé szigorúan írja be), de a C ++ és a C # nem engedi a hozzárendelést, hacsak nem ösztönözted öntés segítségével.Nem ragadtál be ezekbe fordítóprogram generált értékeket, az itt látható módon hozzáigazíthatja számukhoz saját egész számát.
A kék és az indigó azonos értékének megadása nem hiba, mivel a felsorolók szinonimákat tartalmazhatnak, mint például a skarlát és a vörös.
Nyelvi különbségek
C-ben a változó A nyilatkozatot a szónak kell megelőznie enum mint a
A C ++ esetében azonban erre nincs szükség rainbowcolors egy különálló típus, amelynek nincs szüksége az enum típusú előtagra.
A C # -ben az értékeket a típusnévvel lehet elérni, mint a
Mi a pont az enumokra?
Az enumok használata növeli az absztrakció szintjét, és lehetővé teszi a programozónak, hogy elgondolkodjon azon, hogy mit jelentenek az értékek, ahelyett, hogy aggódnának a tárolásuk és elérésük miatt. Ez csökkenti a hibák előfordulását.
Íme egy példa. Van egy sor közlekedési lámpánál három izzóval - piros, sárga és zöld. Az Egyesült Királyságban a közlekedési lámpák sorrendje megváltozik e négy szakaszban.
- Piros - A forgalom leállt.
- Mindkét Piros és Sárga - A forgalom továbbra is megállt, de a fények zöldre váltanak.
- Zöld - A forgalom mozoghat.
- Sárga - Figyelmeztetés a hamarosan pirosra váltásról.
Jelzőlámpa
A lámpákat úgy vezérlik, hogy a vezérlő bájt alsó három bitjére írják. Ezeket egy kicsit mintázatként adjuk meg alább, binárisan, ahol a RYG képviseli a három bitet. Ha R 1, a piros lámpa világít stb.
Ebben az esetben könnyen belátható, hogy a fenti négy állapot megfelel a 4 = értékeknek Piros be, 6 = Piros + Sárga mindkettő be van kapcsolva, 1 = Zöld be és 2 = Sárga tovább.
Ezzel a funkcióval
Osztály használata az Enums helyett
A C ++ és a C # esetén létre kell hoznunk egy osztályt, majd azt túlterhelés az üzemeltető | megengedni OR-ing típusú közlekedési lámpák.
Az enumok használatával megakadályozzuk az egyéb bitekkel kapcsolatos problémákat az izzó vezérlő bájtjában. Lehet, hogy a többi bit vezérli az öntesztet vagy a "Green Lane" kapcsolót. Ebben az esetben egy hiba, amely lehetővé teszi ezen bitek normál használatban történő beállítását, pusztíthat.
Az biztos, hogy elfedtük a biteket a SetTrafficlights ()funkció tehát nem számít, milyen értéket adunk át, csak az alsó három bit megváltozik.
Következtetés
Az enumoknak vannak ezek az előnyei:
- Korlátozza azokat az értékeket, amelyeket az enum változó felvehet.
- Arra kényszerítik Önt, hogy gondolkozzon az összes lehetséges értékre, amelyet az enum fel tud venni.
- Állandó, nem pedig szám, és növelik a forráskód