Co to jest enum w językach programowania?

Skrót od wyliczenia, wyliczenie typ zmiennej można znaleźć w C (ANSI, nie oryginalny K&R), C ++ i DO#. Chodzi o to, że zamiast używać int do reprezentowania zestawu wartości używany jest typ z ograniczonym zestawem wartości.

Na przykład, jeśli użyjemy kolorów tęczy, które są

  1. Czerwony
  2. Pomarańczowy
  3. Żółty
  4. Zielony
  5. niebieski
  6. Indygo
  7. Fioletowy

Jeśli wyliczenia nie istnieją, możesz użyć #definiować (w C) lub const w C ++ / C #, aby określić te wartości. Na przykład

Zbyt wiele Ints, by liczyć!

Problem polega na tym, że jest ich o wiele więcej ints niż kolory. Jeśli fiolet ma wartość 7, a program przypisuje wartość 15 do zmiennej, wtedy jest to oczywiście błąd, ale może nie zostać wykryty, ponieważ 15 jest prawidłową wartością liczby całkowitej.

Enums na ratunek

Wyliczenie to typ zdefiniowany przez użytkownika składający się z zestawu nazwanych stałych zwanych modułami wyliczającymi. Kolory tęczy zostaną zmapowane w ten sposób:

Teraz wewnętrznie kompilator użyje int, aby je przechować, a jeśli nie podano żadnych wartości, czerwony będzie wynosił 0, pomarańczowy będzie 1 itd.

instagram viewer

Chodzi o to, że kolory tęczy jest typem i można do niego przypisać tylko inne zmienne tego samego typu. C jest łatwiejszy (tzn. Mniej ściśle wpisany), ale C ++ i C # nie zezwalają na przypisanie, chyba że wymusisz to za pomocą rzutowania.

Nie utkniesz z nimi kompilator wygenerowane wartości, możesz przypisać do nich własną stałą całkowitą, jak pokazano tutaj.

Posiadanie niebieskiego i indygo o tej samej wartości nie jest błędem, ponieważ wyliczacze mogą zawierać synonimy takie jak szkarłat i szkarłat.

Różnice językowe

W C: zmienna deklaracja musi być poprzedzona słowem wyliczanie jak w

Jednak w C ++ nie jest to potrzebne jako kolory tęczy jest odrębnym typem, który nie wymaga przedrostka typu wyliczeniowego.

W C # wartości są dostępne po nazwie typu jak w

Jaki jest sens wyliczeń?

Używanie wyliczeń zwiększa poziom abstrakcji i pozwala programiście zastanowić się, co oznaczają wartości, zamiast martwić się o to, jak są przechowywane i dostępne. Zmniejsza to występowanie błędów.

Oto przykład. Mamy zestaw sygnalizacji świetlnej z trzema żarówkami czerwony, żółty i Zielony. W Wielkiej Brytanii sekwencja sygnalizacji świetlnej zmienia się w tych czterech fazach.

  1. Czerwony - Ruch zatrzymany.
  2. Obie Czerwony i Żółty - Ruch nadal jest zatrzymany, ale światła zmieniają się na zielone.
  3. Zielony - Ruch może się poruszać.
  4. Żółty - Ostrzeżenie o zbliżającej się zmianie na czerwony.

Przykład sygnalizacji świetlnej

Kontrolą świateł jest zapis do dolnych trzech bitów bajtu kontrolnego. Są one ułożone jako wzór bitowy poniżej w postaci binarnej, gdzie RYG reprezentują trzy bity. Jeśli R wynosi 1, czerwone światło jest włączone itp.

W takim przypadku łatwo zauważyć, że cztery powyższe stany odpowiadają wartości 4 = Czerwony on, 6 = Czerwony + Żółty oba włączone, 1 = Zielony on i 2 = Żółty na.

Dzięki tej funkcji

Używanie klasy zamiast wyliczeń

W C ++ i C # musielibyśmy stworzyć klasę przeciążać operator | zezwolić OR-ing rodzajów sygnalizacja świetlna.

Używając wyliczeń zapobiegamy problemom z przypisywaniem innych bitów do bajtu kontrolnego żarówki. Możliwe, że niektóre inne bity kontrolują autotest lub przełącznik „Green Lane”. W takim przypadku błąd, który pozwala na ustawienie tych bitów podczas normalnego użytkowania, może siać spustoszenie.

Dla pewności ukrywamy bity w SetTrafficlights ()funkcjonować więc bez względu na przekazywaną wartość zmieniane są tylko trzy dolne bity.

Wniosek

Wyliczenia mają następujące zalety:

  • Ograniczają wartości, które może przyjmować zmienna wyliczeniowa.
  • Zmuszają cię do myślenia o wszystkich możliwych wartościach, które może przyjąć wyliczenie.
  • Są stałą, a nie liczbą, zwiększając czytelność kod źródłowy
instagram story viewer