Mis on programmeerimiskeelte enum?

Loendamise lühike, enum muutuja tüüp võib leida C (ANSI, mitte algne K&R), C ++ ja C #. Idee on selles, et selle asemel, et kasutada int väärtuste kogumi tähistamiseks kasutatakse selle asemel piiratud väärtustega komplekti tüüpi.

Näiteks kui kasutame vikerkaare värve, mis on

  1. Punane
  2. Oranž
  3. Kollane
  4. Roheline
  5. Sinine
  6. Indigo
  7. violetne

Kui enume ei eksisteerinud, võite kasutada a #defineeri (C-s) või const C ++ / C # -s nende väärtuste täpsustamiseks. Nt

Liiga palju intoneid loota!

Selle probleem on see, et neid on palju rohkem ints kui värvid. Kui violetse väärtus on 7 ja programmi annab muutujale väärtuse 15, siis on see selgelt viga, kuid seda ei pruugita tuvastada, kuna 15 on int-i jaoks kehtiv väärtus.

Enumsi päästmiseks

Enum on kasutaja määratletud tüüp, mis koosneb nimetatud konstantide komplektist, mida nimetatakse loendajateks. Vikerkaare värvid kaardistatakse järgmiselt:

Nüüd kasutab kompilaator sisemiselt nende hoidmiseks int ja kui väärtusi ei sisestata, on punane 0, oranž 1 jne.

Asi on selles

instagram viewer
vikerkaarevärvid on tüüp ja sellele saab omistada ainult teisi sama tüüpi muutujaid. C on hõlpsam (st vähem rangelt kirjutatud), kuid C ++ ja C # ei luba loovutamist, kui te ei sunnita seda enamuse abil.

Nendega pole kinni koostaja loodud väärtusi, saate neile määrata oma täisarvu konstandi, nagu siin näidatud.

Sama väärtusega sinise ja indigo omamine ei ole viga, kuna loendajad võivad sisaldada sünonüüme nagu scarlet ja karmiinpunane.

Keele erinevused

C-s tähistab muutuja deklaratsioonile peab eelnema sõna enum nagu

C ++ puhul pole seda aga vaja vikerkaarevärvid on eraldiseisev tüüp, mis ei vaja enumi tüübi eesliidet.

C # puhul pääseb väärtustele juurde tüübinime järgi nagu punktis

Mis mõte on enumidel?

Enumide kasutamine suurendab abstraktsiooni taset ja laseb programmeerijal mõelda, mida väärtused tähendavad, selle asemel et muretseda, kuidas neid hoitakse ja neile juurde pääseda. See vähendab vigade esinemist.

Siin on näide. Meil on kolme pirniga fooride komplekt- punane, kollane ja roheline. Suurbritannias muutub fooritulede järjestus nendes neljas faasis.

  1. Punane - liiklus on peatunud.
  2. Mõlemad Punane ja Kollane - Liiklus peatus endiselt, kuid tuled muutuvad roheliseks.
  3. Roheline - Liiklus võib liikuda.
  4. Kollane - hoiatus kohese muutumise kohta punaseks.

Valgusfoori näide

Valguste juhtimiseks kirjutatakse juhtbaidi alumisse kolme bitti. Need on esitatud bitaarmustrina allpool, binaarselt, kus RYG tähistab kolme bitti. Kui R on 1, põleb punane tuli jne.

Sel juhul on lihtne näha, et neli ülaltoodud olekut vastavad väärtustele 4 = Punane sisse, 6 = Punane + Kollane mõlemad sees, 1 = Roheline sisse ja 2 = Kollane peal.

Selle funktsiooniga

Klassi kasutamine Enumsi asemel

C ++ ja C # korral peaksime looma klassi ja siis ülekoormus operaator | lubama VÕI-ing tüüpi valgusfoorid.

Enumide abil väldime probleeme teiste bittidega, mis on määratud pirni juhtimisbaidile. Võib juhtuda, et mõned muud bitid kontrollivad enesekontrolli või lülitit "Roheline rada". Sel juhul võib viga, mis lubab need bitid tavakasutuses seadistada, hävitada.

Kindel oleks see, et maskeerisime bitti SetTrafficlights ()funktsiooni nii et sõltumata sellest, millist väärtust sisse antakse, muudetakse ainult alumist kolme bitti.

Järeldus

Enumidel on järgmised eelised:

  • Need piiravad väärtusi, mida enum muutuja saab võtta.
  • Need sunnivad teid mõtlema kõigile võimalikele väärtustele, mida enum võib võtta.
  • Need on pigem konstant kui arv, suurendades numbri loetavust lähtekood