Wat is een opsomming in programmeertalen?

Afkorting van opsomming, een opsomming variabel type is te vinden in C (ANSI, niet in de originele K&R), C ++ en C #. Het idee is dat in plaats van een int om een ​​set waarden voor te stellen, wordt in plaats daarvan een type met een beperkte set waarden gebruikt.

Als we bijvoorbeeld de kleuren van de regenboog gebruiken, die zijn

  1. Rood
  2. Oranje
  3. Geel
  4. Groen
  5. Blauw
  6. Indigo
  7. paars

Als enums niet bestonden, zou je een #bepalen (in C) of const in C ++ / C # om deze waarden op te geven. Bijv

Te veel ints om te tellen!

Het probleem hiermee is dat er nog veel meer zijn ints dan kleuren. Als violet de waarde 7 heeft, en de programma wijst een waarde van 15 toe aan een variabele, dan is het duidelijk een bug maar wordt mogelijk niet gedetecteerd omdat 15 een geldige waarde is voor een int.

Enums to the Rescue

Een enum is een door de gebruiker gedefinieerd type dat bestaat uit een set benoemde constanten die enumeratoren worden genoemd. De kleuren van de regenboog worden als volgt in kaart gebracht:

Nu intern gebruikt de compiler een int om deze vast te houden en als er geen waarden worden opgegeven, is rood 0, oranje 1 enz.

instagram viewer

Het punt is dat regenboogkleuren is een type en hieraan kunnen alleen andere variabelen van hetzelfde type worden toegewezen. C is gemakkelijker in de omgang (dwz minder strikt getypt), maar C ++ en C # staan ​​toewijzing niet toe, tenzij je het forceert door een cast te gebruiken.

Je zit hier niet aan vast compiler gegenereerde waarden, kunt u hier uw eigen integerconstante aan toewijzen, zoals hier getoond.

Blauw en indigo hebben met dezelfde waarde is geen vergissing, aangezien opsommers synoniemen zoals scharlaken en karmozijnrood kunnen bevatten.

Taalverschillen

In C, de variabel verklaring moet worden voorafgegaan door het woord enum als in

In C ++ is het echter niet nodig regenboogkleuren is een apart type dat het voorvoegsel van het opsommingstype niet nodig heeft.

In C # zijn de waarden toegankelijk via de typenaam zoals in

Wat is het doel van Enums?

Het gebruik van enums verhoogt het abstractieniveau en laat de programmeur nadenken over wat de waarden betekenen in plaats van zich zorgen te maken over hoe ze worden opgeslagen en geopend. Dit vermindert het optreden van bugs.

Hier is een voorbeeld. We hebben een set verkeerslichten met drie lampen- rood, geel en groen. In het VK verandert de volgorde van verkeerslichten in deze vier fasen.

  1. Rood - Verkeer gestopt.
  2. Beide Rood en Geel - Het verkeer is nog steeds gestopt, maar de lichten gaan groen worden.
  3. Groen - Verkeer kan bewegen.
  4. Geel - Waarschuwing voor op handen zijnde verandering in rood.

Verkeerslicht voorbeeld

De lichten worden bestuurd door naar de onderste drie bits van een besturingsbyte te schrijven. Deze zijn hieronder als een bitpatroon opgemaakt in binair waar RYG de drie bits vertegenwoordigt. Als R 1 is, brandt het rode lampje enz.

In dit geval is het gemakkelijk te zien dat de vier bovenstaande toestanden overeenkomen met waarden 4 = Rood aan, 6 = Rood + Geel beide aan, 1 = Groen aan en 2 = Geel Aan.

Met deze functie

Een klasse gebruiken in plaats van Enums

In C ++ en C # moeten we een klasse maken en dan overbelasten de telefoniste | toelaten OR-ing soorten verkeerslichten.

Door enums te gebruiken voorkomen we problemen met andere bits die worden toegewezen aan de bulb-besturingsbyte. Het kan zijn dat sommige van de andere bits zelftesten of een "Green Lane" -schakelaar besturen. In dat geval kan een bug waardoor deze bits bij normaal gebruik kunnen worden ingesteld, grote schade aanrichten.

Om zeker te zijn, maskeren we de stukjes in de SetTrafficlights ()functie dus ongeacht welke waarde wordt doorgegeven, alleen de onderste drie bits worden gewijzigd.

Conclusie

Enums hebben deze voordelen:

  • Ze beperken de waarden die de enum-variabele kan hebben.
  • Ze dwingen je na te denken over alle mogelijke waarden die de enum kan aannemen.
  • Ze zijn een constante in plaats van een getal, waardoor de leesbaarheid van de broncode
instagram story viewer