Mikä on ohjelmointikielten enum?

Lyhyt luettelointiin, enum muuttuva tyyppi löytyy kohdista C (ANSI, ei alkuperäinen K&R), C ++ ja C #. Ajatuksena on, että sen sijaan, että käytät int arvojoukon edustamiseksi käytetään sen sijaan tyyppiä, jolla on rajoitettu arvojoukko.

Esimerkiksi, jos käytämme sateenkaaren värejä, jotka ovat

  1. Punainen
  2. Oranssi
  3. Keltainen
  4. Vihreä
  5. Sininen
  6. Indigo
  7. Violetti

Jos enumeja ei ollut, voit käyttää a #määritellä (C: ssä) tai const kohdassa C ++ / C # näiden arvojen määrittämiseksi. Esim

Liian monta inttia laskea!

Tämän ongelmana on, että niitä on paljon enemmän ints kuin värit. Jos violetti on arvo 7, ja ohjelmoida antaa arvon 15 muuttujalle, niin se on selvästi vika, mutta sitä ei ehkä havaita, koska 15 on kelvollinen arvo int.

Pelastusosastot

Enum on käyttäjän määrittelemä tyyppi, joka koostuu joukosta nimettyjä vakioita, joita kutsutaan enumerators. Sateenkaarin värit kartoitettaisiin seuraavasti:

Nyt sisäisesti kääntäjä käyttää int ylläpitämään näitä ja jos arvoja ei anneta, punainen on 0, oranssi on 1 jne.

instagram viewer

Asia on siinä rainbowcolors on tyyppi ja siihen voidaan määrittää vain muita samantyyppisiä muuttujia. C on helpompi mennä (ts. Vähemmän tiukasti kirjoitettu), mutta C ++ ja C # eivät salli tehtäviä, ellet pakota sitä valetulla.

Et ole juuttunut näihin kääntäjä Luodut arvot, voit määrittää oman kokonaisluvun vakiona heille kuten tässä näytetään.

Sinisellä ja indigolla sama arvo ei ole virhe, koska luetteloijat saattavat sisältää synonyymejä, kuten scarlet ja crimson.

Kieli-erot

C: ssä muuttuja ilmoitusta on edeltävä sana ENUM kuten

C ++: ssa sitä ei kuitenkaan tarvita rainbowcolors on erillinen tyyppi, joka ei tarvitse enum-tyyppistä etuliitettä.

C # -arvoissa arvoihin päästään tyypin nimellä kuten kohdassa

Mikä on enumien kohta?

Enumien käyttö lisää abstraktiotasoa ja antaa ohjelmoijan miettiä, mitä arvot tarkoittavat, sen sijaan, että he huolehtisivat siitä, kuinka niitä säilytetään ja miten niitä käytetään. Tämä vähentää virheiden esiintymistä.

Tässä on esimerkki. Meillä on joukko liikennevaloja, joissa on kolme polttimoa- punainen, keltainen ja vihreä. Isossa-Britanniassa liikennevalojen järjestys muuttuu näissä neljässä vaiheessa.

  1. Punainen - Liikenne pysähtynyt.
  2. molemmat Punainen ja Keltainen - Liikenne pysähtyi edelleen, mutta valot muuttuvat vihreäksi.
  3. Vihreä - Liikenne voi liikkua.
  4. Keltainen - Varoitus välittömästä muutoksesta punaiseksi.

Esimerkki liikennevaloista

Valoja ohjataan kirjoittamalla ohjaustavun kolmeen alempaan bittiin. Nämä on esitetty bittikuvana alla binaarina, jossa RYG edustaa kolmea bittiä. Jos R on 1, punainen valo palaa jne.

Tässä tapauksessa on helppo nähdä, että neljä yllä olevaa tilaa vastaavat arvoja 4 = Punainen päällä, 6 = Punainen + Keltainen molemmat päällä, 1 = Vihreä päällä ja 2 = Keltainen päällä.

Tämän toiminnon avulla

Luokan käyttäminen Enumien sijasta

Kohdassa C ++ ja C # meidän on luotava luokka ja sitten ylikuormittaa operaattori | sallia TAI-ta tyyppejä liikennevalot.

Enumeja käyttämällä estetään ongelmia muiden bittien osoittamisen kanssa lampun ohjaustavuun. Voi olla, että jotkut muut bitit ohjaavat itsetestausta tai "Green Lane" -kytkintä. Tällöin virhe, joka sallii näiden bittien asettamisen normaaliin käyttöön, voisi aiheuttaa tuhoa.

Varmistaaksesi, että peitimme bitit SetTrafficlights ()toimia joten riippumatta siitä, mikä arvo välitetään, vain kolme alaosaa muuttuvat.

johtopäätös

Enumeilla on nämä edut:

  • Ne rajoittavat arvoja, joita enum-muuttuja voi ottaa.
  • Ne pakottavat sinut pohtimaan kaikkia mahdollisia arvoja, joita enum voi ottaa.
  • Ne ovat pikemminkin vakio kuin luku, mikä lisää lähdekoodi