Co je enum v programovacích jazycích?

Zkratka pro výčet, výčet variabilní typ lze nalézt v C (ANSI, ne původní K&R), C ++ a C#. Myšlenka je, že místo použití int Pro reprezentaci sady hodnot se místo toho používá typ s omezenou sadou hodnot.

Například pokud použijeme barvy duhy, které jsou

  1. Červené
  2. oranžový
  3. Žlutá
  4. Zelený
  5. Modrý
  6. Indigo
  7. fialový

Pokud výčty neexistovaly, můžete použít #definovat (v C) nebo konst v C ++ / C # k určení těchto hodnot. Např

Příliš mnoho Ints počítat!

Problém je v tom, že jich je mnohem víc ints než barvy. Pokud má fialová hodnota 7 a program přiřadí proměnné hodnotu 15, pak je to zjevně chyba, ale nemusí být detekována, protože 15 je platná hodnota pro int.

Výčty na záchranu

Výčet je uživatelem definovaný typ skládající se ze sady pojmenovaných konstant nazývaných enumerátory. Barvy duhy budou mapovány takto:

Nyní interně kompilátor použije int k jejich zadržení a pokud nejsou zadány žádné hodnoty, červená bude 0, oranžová je 1 atd.

Jde o to duhové barvy je typ a tomuto lze přiřadit pouze jiné proměnné stejného typu. C je snazší (tj. Méně přísně zadané), ale C ++ a C # neumožní přiřazení, pokud to nevynucujete pomocí obsazení.

instagram viewer

Nejste s nimi spokojeni překladač generované hodnoty, můžete jim přiřadit vlastní celočíselnou konstantu, jak je ukázáno zde.

Mít modrou a indigo se stejnou hodnotou není chyba, protože enumerátoři mohou zahrnovat synonyma jako šarlat a karmín.

Jazykové rozdíly

V C, proměnná prohlášení musí předcházet slovo výčet jako v

V C ++ to však není nutné duhové barvy je odlišný typ, který nevyžaduje předponu typu výčtu.

V C # jsou hodnoty zpřístupněny jménem typu jako v

Co je to bod výčtu?

Použití výčtů zvyšuje úroveň abstrakce a umožňuje programátorovi přemýšlet o tom, co hodnoty znamenají, spíše než o starosti s tím, jak jsou uloženy a zpřístupněny. Tím se snižuje výskyt chyb.

Zde je příklad. Máme sadu semaforů se třemi žárovkami- Červené, žlutá a zelený. Ve Velké Británii se v těchto čtyřech fázích mění sled semaforů.

  1. Červené - Provoz zastaven.
  2. Oba Červené a Žlutá - Provoz stále zastaven, ale světla se změní na zelenou.
  3. Zelený - Provoz se může pohybovat.
  4. Žlutá - Varování před bezprostřední změnou na červenou.

Příklad semaforu

Světla jsou ovládána zápisem na spodní tři bity kontrolního bytu. Ty jsou rozloženy jako bitový vzor níže v binárním formátu, kde RYG představují tři bity. Pokud R je 1, svítí červené světlo atd.

V tomto případě je snadné vidět, že výše uvedené čtyři stavy odpovídají hodnotám 4 = Červené dne, 6 = Červené + Žlutá oboje, 1 = Zelený a 2 = Žlutá na.

S touto funkcí

Použití třídy místo výčtů

V C ++ a C # bychom museli vytvořit třídu a pak přetížení provozovatel | dovolit OR-ing typů semafory.

Použitím výčtů předcházíme problémům s přiřazením dalších bitů k ovládacímu bajtu žárovky. Je možné, že některé další bity kontrolují autotestování nebo přepínač „Green Lane“. V takovém případě by chyba, která umožňuje tyto bity nastavit v běžném použití, mohla způsobit katastrofu.

Abychom si byli jisti, zakryli jsme bity v SetTrafficlights ()funkce takže bez ohledu na to, jaká hodnota je předána, změní se pouze spodní tři bity.

Závěr

Výčty mají tyto výhody:

  • Omezují hodnoty, které může mít proměnná enum.
  • Nutí vás přemýšlet o všech možných hodnotách, které může výčet převzít.
  • Jsou spíše konstantou než číslem, což zvyšuje čitelnost zdrojový kód
instagram story viewer