Što je Enum u programskim jezicima?

Skraćeno za nabrajanje, enum varijabilnog tipa može se naći u C (ANSI, nije izvorni K&R), C ++ i C #. Ideja je da umjesto upotrebe an int za predstavljanje skupa vrijednosti koristi se vrsta s ograničenim skupom vrijednosti.

Na primjer, ako koristimo boje duge, koje su

  1. Crvena
  2. naranča
  3. Žuta boja
  4. zelena
  5. plava
  6. Indigo
  7. ljubičasta

Ako enumi ne postoje, možete upotrijebiti a #definirati (u C) ili const u C ++ / C # da biste odredili ove vrijednosti. npr

Previše kilograma za brojanje!

Problem s tim je što postoji mnogo više Ints nego boje. Ako ljubičica ima vrijednost 7 i program varijabli dodjeljuje vrijednost 15, tada je očigledno bug, ali ga možda neće otkriti jer je 15 valjana vrijednost za int.

Enuma za spas

Enum je korisnički definirani tip koji se sastoji od skupa imenovanih konstanta koje se nazivaju popisivači. Boje duge bi se preslikale ovako:

Sad interno, prevoditelj će koristiti int da ih drži, a ako se ne dodaju vrijednosti, crvena će biti 0, narančasta je 1 itd.

Poanta je u tome rainbowcolors

instagram viewer
je tip i samo se njemu mogu dodijeliti ostale varijable istog tipa. C ide lakše (tj. Manje strogo kucano), ali C ++ i C # neće dopustiti dodjeljivanje ako je ne prisilite pomoću lijeve tipke.

Ne držiš se ovoga kompajler generirane vrijednosti, možete im dodijeliti vlastitu cjelobrojnu konstantu kao što je prikazano ovdje.

Imati plavu i indigo istu vrijednost nije pogreška jer bi popisivači mogli uključivati ​​sinonime kao što su grimizni i grimizni.

Razlike jezika

U C, the varijabla deklaraciji mora prethoditi riječ enum kao u

U C ++ ipak nije potreban kao rainbowcolors je različit tip koji ne treba prefiks tipa enum.

U C # vrijednostima se pristupa nazivu vrste kao u

Što je poanta enuma?

Korištenje enuma povećava razinu apstrakcije i omogućuje programeru da razmišlja o tome što vrijednosti znače, a ne da brine o tome kako su pohranjene i kojima pristupaju. To smanjuje pojavu grešaka.

Evo primjera. Imamo komplet semafora s tri žarulje- Crvena, žuta boja i zelena. U Velikoj Britaniji se redoslijed semafora mijenja u ove četiri faze.

  1. Crvena - Promet je zaustavljen.
  2. Oba Crvena i Žuta boja - Promet se i dalje zaustavio, ali svjetla će se uskoro promijeniti u zeleno.
  3. zelena - Promet se može kretati.
  4. Žuta boja - Upozorenje na skori prelazak na crveno.

Primjer semafora

Svjetlima se upravlja tako što se na donja tri bita upravljačkog bajta napiše. Oni su prikazani kao bitni obrazac ispod u binarnom formatu gdje RYG predstavljaju tri bita. Ako je R 1, upaljeno je crveno svjetlo itd.

U ovom je slučaju lako vidjeti da četiri gornja stanja odgovaraju vrijednostima 4 = Crvena na, 6 = Crvena + Žuta boja oba na, 1 = zelena na i 2 = Žuta boja na.

S ovom funkcijom

Korištenje klase umjesto Enuma

U C ++ i C # trebali bismo stvoriti razred i tada preopterećenje operator | dopustiti O-prsten vrsta trafficlights.

Korištenjem enuma sprječavamo probleme da se drugi bitovi dodijele bajtu za kontrolu žarulje. Može biti da neki drugi bitovi kontroliraju samo testiranje ili preklopku "Green Lane". U tom slučaju, greška koja omogućuje postavljanje tih bitova u uobičajenu upotrebu mogla bi opustošiti.

Da bismo bili sigurni, maskirali bismo bitove u SetTrafficlights ()funkcija pa bez obzira na to koja se vrijednost prenosi, mijenjaju se samo tri bita.

Zaključak

Enumi imaju ove prednosti:

  • Ograničavaju vrijednosti koje varijabla enum može uzeti.
  • Prisiljavaju vas da razmišljate o svim mogućim vrijednostima koje enum može uzeti.
  • Oni su stalnica, a ne broj, čime se povećava čitljivost ovog izvorni kod
instagram story viewer