Kaj je enum v programskih jezikih?
Richard Drury/Iconica/Getty Images
Okrajšava za naštevanje, enum variabilni tip je mogoče najti v C (ANSI, ne izvirni K&R), C++ inC#. Ideja je, da namesto uporabe int za predstavitev nabora vrednosti se namesto tega uporablja tip z omejenim naborom vrednosti.
Na primer, če uporabimo barve mavrice, ki so
- rdeča
- Oranžna
- Rumena
- Zelena
- Modra
- Indigo
- Vijolična
Če enumi ne obstajajo, lahko uporabite a #definiraj (v C) oz konst v C++/C#, da podate te vrednosti. Npr
Preveč intov za štetje!
Težava pri tem je, da jih je veliko več int kot barve. Če ima vijolična vrednost 7, in program spremenljivki dodeli vrednost 15, potem je očitno hrošč, vendar je morda ne bodo zaznali, saj je 15 veljavna vrednost za int.
Enumi na pomoč
Enum je uporabniško definiran tip, sestavljen iz nabora poimenovanih konstant, imenovanih enumeratorji. Barve mavrice bi bile preslikane takole:
Zdaj interno bo prevajalnik za shranjevanje teh uporabil int in če ni podana nobena vrednost, bo rdeča 0, oranžna 1 itd.
Kakšna je korist enuma?
Bistvo je v tem mavrične barve je tip in temu lahko dodelite samo druge spremenljivke istega tipa. C je lažji (tj. manj strogo tipiziran), vendar C++ in C# ne dovolita dodeljevanja, razen če ga vsilite s pretvorbo.
Niste obtičali s temi prevajalnik generirane vrednosti, jim lahko dodelite lastno celoštevilsko konstanto, kot je prikazano tukaj.
Imeti modro in indigo barvo z enako vrednostjo ni napaka, saj lahko popisovalci vključijo sopomenke, kot sta škrlat in škrlat.
Jezikovne razlike
V C je spremenljivka pred izjavo mora biti beseda enum kot v
V C++ pa ni potreben kot mavrične barve je poseben tip, ki ne potrebuje predpone tipa enum.
V C# so vrednosti dostopne z imenom tipa kot v
Kaj je smisel enumov?
Uporaba enumov poveča raven abstrakcije in omogoča programerju, da razmišlja o tem, kaj vrednosti pomenijo, namesto da skrbi, kako so shranjene in dostopne. To zmanjša pojav napak.
Tukaj je primer. Imamo komplet semaforjev s tremi žarnicami- rdeča , rumena in zelena . V Združenem kraljestvu se zaporedje semaforjev spreminja v teh štirih fazah.
- Oboje rdeča in Rumena - Promet je še vedno ustavljen, vendar se bodo luči spremenile v zeleno.
- Omejujejo vrednosti, ki jih lahko sprejme spremenljivka enum.
- Prisilijo vas, da razmislite o vseh možnih vrednostih, ki jih enum lahko sprejme.
- So konstanta in ne število, povečujejo berljivost izvorna koda
Primer semaforja
Luči se krmilijo s pisanjem na spodnje tri bite kontrolnega bajta. Ti so prikazani kot bitni vzorec spodaj v binarni obliki, kjer RYG predstavljajo tri bite. Če je R 1, sveti rdeča lučka itd.
V tem primeru je enostavno videti, da zgornja štiri stanja ustrezajo vrednosti 4 = rdeča vklopljeno, 6= rdeča + Rumena oba vklopljena, 1 = Zelena in 2 = Rumena na.
S to funkcijo
Uporaba razreda namesto enumov
V C++ in C# bi morali ustvariti razred in nato preobremenitev operater | dovoliti ALI-ing vrst semafor .
Z uporabo enumov preprečimo težave z drugimi biti, ki so dodeljeni krmilnemu bajtu žarnice. Morda nekateri drugi biti nadzorujejo samotestiranje ali stikalo 'Green Lane'. V tem primeru bi lahko hrošč, ki omogoča nastavitev teh bitov pri normalni uporabi, povzročil opustošenje.
Zagotovo bi zakrili delčke v SetTrafficlights() funkcijo torej ne glede na to, katera vrednost je posredovana, se spremenijo samo spodnji trije biti.
Zaključek
Enumi imajo naslednje prednosti: