VKontakte Facebooku Świergot Kanał RSS

Bankowość internetowa daje szansę. Bankowość elektroniczna. Jeden ze sposobów na przetrwanie banków

Typ wyliczeniowy definiuje się jako zbiór identyfikatorów, które pod względem językowym pełnią tę samą rolę co zwykłe nazwane stałe, ale są powiązane z tym typem. Klasyczny opis Typ wyliczeniowy w Pascalu wygląda następująco:

wpisz Cardsuit = (trefle, karo, kier, pik);

W tym miejscu deklarowany jest typ danych Cardsuit ( kolor karty), których wartością może być dowolna z czterech wymienionych stałych. Zmienna typu Cardsuit może przyjmować jedną z wartości trefl, karo, kier, pik; można porównywać wartości typu wyliczeniowego pod kątem równości lub nierówności, a także wykorzystywać je w operatorach selekcji (w przypadku Pascala) jako wartości identyfikujące opcje.

Stosowanie wyliczeń pozwala na zwiększenie czytelności kodów źródłowych programów, gdyż umożliwiają one zastąpienie „magicznych liczb” kodujących określone wartości czytelnymi nazwami.

W niektórych językach typy zestawów można tworzyć na podstawie wyliczeń. W takich przypadkach zbiór jest rozumiany (i opisywany) jako nieuporządkowany zbiór unikalnych wartości typu wyliczeniowego.

Typ wyliczeniowy można stosować w deklaracjach zmiennych i parametrach formalnych funkcji (procedur, metod). Wartości typu wyliczeniowego można przypisywać do odpowiednich zmiennych i przekazywać poprzez parametry odpowiednich typów do funkcji. Ponadto zawsze obsługiwane są porównania wartości typu wyliczeniowego pod kątem równości i nierówności. Niektóre języki obsługują także inne operacje porównywania wartości wyliczonych typów. O wyniku porównania dwóch wyliczonych wartości w takich przypadkach decyduje z reguły kolejność, w jakiej te wartości występują w deklaracji typu - za „mniejszą niż” uważa się wartość, która występuje wcześniej w deklaracji typu wartość, która nastąpi później. Czasami typ wyliczeniowy lub pewien zakres wartości typu wyliczeniowego może być również użyty jako typ indeksu tablicy. W tym przypadku dla każdej wartości z wybranego zakresu w tablicy znajduje się jeden element, a rzeczywista kolejność elementów odpowiada kolejności wartości w deklaracji typu.

Realizacja

Zazwyczaj wartości wyliczeniowe są reprezentowane podczas kompilacji za pomocą liczb całkowitych. W zależności od konkretnego języka programowania taka reprezentacja może być albo całkowicie ukryta przed programistą, albo dostępna dla niego przy zastosowaniu pewnych „obejść” (na przykład wymuszenie konwersji wartości wyliczeniowej na wartość całkowitą), albo nawet kontrolowana przez programista (w takich przypadkach programista ma możliwość jednoznacznego określenia, jakimi liczbami będą kodowane wszystkie lub niektóre wartości typu wyliczeniowego). Wszystkie opcje mają swoje pozytywne i aspekty negatywne. Z jednej strony możliwość wykorzystania wartości liczbowych stałych tworzących typ wyliczeniowy, zwłaszcza jeśli zostanie nadużyta, mija się z celem stosowania tych typów i stwarza ryzyko błędów (w przypadku stosowania wartości liczbowych, dla których w typie nie ma odpowiednich stałych). Z drugiej strony, jawne zarządzanie wartością daje pewne korzyści dodatkowe funkcje. Na przykład pozwala na użycie typów wyliczeniowych podczas organizowania interfejsu z modułami napisanymi w innych językach, jeśli wykorzystują lub zwracają wartości zakodowane w postaci liczb całkowitych z jakiegoś predefiniowanego zestawu.

Kolejną możliwością, jaką zapewniają typy wyliczeniowe na poziomie implementacji języka, jest oszczędność pamięci. W przypadku małego typu wyliczeniowego wystarczy kilka bitów do przechowywania wartości tego typu (powyższy typ Cardsuit wymaga tylko dwóch bitów na wartość, podczas gdy standardowa liczba całkowita w większości używanych architektur zajmuje 32 bity – 16 razy więcej), a kompilator może wykorzystać ten fakt, służy do kompresji danych przechowywanych w pamięci. Może to być szczególnie ważne, jeśli w jednym rekordzie przechowywanych jest wiele wartości typu wyliczeniowego – zagęszczanie rekordów podczas przetwarzania ich dużej liczby może zwolnić dużo pamięci. Należy jednak zauważyć, że kompilatory zwykle nie implementują tej funkcji, przynajmniej nie w ostatnio, kiedy pamięć komputerowa stała się znacznie tańsza.

Krytyka

Typ wyliczeniowy jest tradycyjny dla rozwiniętych języków programowania, jest dość powszechnie używany i często traktowany jako coś oczywistego. Jednak i ten typ nie jest pozbawiony krytyki ze strony teoretyków i praktyków programowania. Dlatego podczas opracowywania języka programowania Oberon na listę funkcji, które zostały usunięte z języka, włączono przeliczalne typy. Niklaus Wirth, twórca języka, podał następujące powody:

Z drugiej strony, na przykład w Javie, która początkowo nie zawierała typu wyliczeniowego, typ ten został później wprowadzony ze względu nie tylko na wygodę, ale także na niezawodność: problem używania grup nazwanych stałych zamiast wyliczeń polega na tym, że nie ma brak kontroli ze strony kompilatora nad unikalnością wartości stałych, a także możliwością przypadkowego przypisania wartości do zmiennych, które nie odpowiadają żadnej z tych stałych.

Opis wyliczeń w różnych językach

Karta Enum (KLUBY, DIAMENTY, SERCA, PIKI);

Dynamiczne, słabo typowane języki o składni podobnej do C (takie jak Perl czy JavaScript) generalnie nie posiadają wyliczeń.

C++

Wyliczenia C++ bezpośrednio dziedziczą zachowanie wyliczeń C, z tą różnicą, że typ wyliczeniowy w C++ jest typem rzeczywistym, a słowo kluczowe enum jest używane tylko podczas deklarowania tego typu. Jeżeli podczas przetwarzania parametru będącego wyliczeniem nie zostanie przetworzona jakakolwiek wartość z wyliczenia (przykładowo zapomniano o przetworzeniu jednego z elementów wyliczenia w konstrukcji przełącznika), to kompilator może zgłosić ostrzeżenie o zapomniana wartość.

enum Cardsuit (trefle, karo, pik, kier)

Jawa

Oryginalna Java nie zawierała wyliczeń; zamiast tego zaproponowano użycie klas ze stałymi statycznymi. Począwszy od wersji 5 (1.5) do języka wprowadzone zostały wyliczenia, które reprezentują pełnoprawną klasę, do której można dodać dowolną liczbę pól i metod. Wprowadzono wyliczenia, aby zapewnić lepszą kontrolę nad bezpieczeństwem typu.

Opis i zastosowanie

Typ wyliczeniowy definiuje się jako zestaw identyfikatorów, które w terminologii językowej pełnią tę samą rolę co zwykłe nazwane stałe, ale są powiązane z tym typem. Klasyczny opis typu wyliczeniowego w Pascalu wygląda następująco:

Typ Cardsuit = (trefle, karo, kier, pik) ;

Tutaj deklarowany jest typ danych Cardsuit, którego wartością może być dowolna z czterech wymienionych stałych. Zmienna typu Cardsuit może przyjmować jedną z wartości trefl, karo, kier, pik; można porównywać wartości typu wyliczeniowego pod kątem równości lub nierówności, a także wykorzystywać je w operatorach selekcji (w przypadku Pascala) jako wartości identyfikujące opcje.

Zastosowanie wyliczeń pozwala uczynić kody źródłowe programów bardziej czytelnymi, ponieważ umożliwiają one zastępowanie „magiczne liczby”, kodując określone wartości w czytelne nazwy.

Na podstawie wyliczeń można utworzyć niektóre języki ustawić typy. W takich przypadkach zbiór jest rozumiany (i opisywany) jako nieuporządkowany zbiór unikalnych wartości typu wyliczeniowego.

Typ wyliczeniowy można stosować w deklaracjach zmiennych i parametrach formalnych funkcji (procedur, metod). Wartości typu wyliczeniowego można przypisywać do odpowiednich zmiennych i przekazywać poprzez parametry odpowiednich typów do funkcji. Ponadto zawsze obsługiwane są porównania wartości typu wyliczeniowego pod kątem równości i nierówności. Niektóre języki obsługują także inne operacje porównywania wartości wyliczonych typów. O wyniku porównania dwóch wyliczonych wartości w takich przypadkach decyduje z reguły kolejność, w jakiej te wartości występują w deklaracji typu - za „mniejszą niż” uważa się wartość, która występuje wcześniej w deklaracji typu wartość, która nastąpi później. Czasami typ wyliczeniowy lub pewien zakres wartości typu wyliczeniowego może być również użyty jako typ indeksu tablicy. W tym przypadku dla każdej wartości z wybranego zakresu w tablicy znajduje się jeden element, a rzeczywista kolejność elementów odpowiada kolejności wartości w deklaracji typu.

Realizacja

Zazwyczaj wartości wyliczeniowe są reprezentowane podczas kompilacji za pomocą liczb całkowitych. W zależności od konkretnego języka programowania taka reprezentacja może być albo całkowicie ukryta przed programistą, albo dostępna dla niego przy zastosowaniu pewnych „obejść” (na przykład wymuszenie konwersji wartości wyliczeniowej na wartość całkowitą), albo nawet kontrolowana przez programista (w takich przypadkach programista ma możliwość jednoznacznego określenia, jakimi liczbami będą kodowane wszystkie lub niektóre wartości typu wyliczeniowego). Wszystkie opcje mają swoje pozytywne i negatywne strony. Z jednej strony możliwość wykorzystania wartości liczbowych stałych tworzących typ wyliczeniowy, zwłaszcza jeśli zostanie nadużyta, mija się z celem stosowania tych typów i stwarza ryzyko błędów (w przypadku stosowania wartości liczbowych, dla których w typie nie ma odpowiednich stałych). Z drugiej strony jawne zarządzanie wartością zapewnia pewne dodatkowe możliwości. Na przykład pozwala na użycie typów wyliczeniowych podczas organizowania interfejsu z modułami napisanymi w innych językach, jeśli wykorzystują lub zwracają wartości zakodowane w postaci liczb całkowitych z jakiegoś predefiniowanego zestawu.

Kolejną możliwością, jaką zapewniają typy wyliczeniowe na poziomie implementacji języka, jest oszczędność pamięci. W przypadku małego typu wyliczeniowego wystarczy kilka bitów do przechowywania wartości tego typu (powyższy typ Cardsuit wymaga tylko dwóch bitów na wartość, podczas gdy standardowa liczba całkowita w większości używanych architektur zajmuje 32 bity – 16 razy więcej), a kompilator może wykorzystać ten fakt, służy do kompresji danych przechowywanych w pamięci. Może to być szczególnie ważne, jeśli w jednym rekordzie przechowywanych jest wiele wartości typu wyliczeniowego – zagęszczanie rekordów podczas przetwarzania ich dużej liczby może zwolnić dużo pamięci. Należy jednak zauważyć, że kompilatory zwykle nie implementują tej funkcji, przynajmniej ostatnio, gdy pamięć komputera stała się znacznie tańsza.

Krytyka

Typ wyliczeniowy jest tradycyjny dla rozwiniętych języków programowania, jest dość powszechnie używany i często traktowany jako coś oczywistego. Jednak i ten typ nie jest pozbawiony krytyki ze strony teoretyków i praktyków programowania. Tak więc podczas opracowywania języka programowania Oberona wyliczone typy zostały uwzględnione na liście cech, które zostały usunięte z języka. Niklausa Wirtha, twórca języka, podał następujące powody:

Z drugiej strony, na przykład w Javie, która początkowo nie zawierała typu wyliczeniowego, typ ten został później wprowadzony ze względu nie tylko na wygodę, ale także na niezawodność: problem używania grup nazwanych stałych zamiast wyliczeń polega na tym, że nie ma brak kontroli ze strony kompilatora nad unikalnością wartości stałych i możliwością przypadkowego przypisania wartości do zmiennych, które nie odpowiadają żadnej z tych stałych.

Opis wyliczeń w różnych językach

Ada

Karta Enum (KLUBY, DIAMENTY, SERCA, PIKI) ;

Dynamiczne, słabo typowane języki o składni podobnej do C (np. perł Lub JavaScript), z reguły nie mają wyliczeń.

C++

C#

Karton Enum (trefle, karo, pik, kier);

Jawa

Karton Enum (trefle, karo, pik, kier)

Haskell

W niektórych języki programowania(na przykład w języku Haskell) używając Typy algebraiczne wyliczenia można emulować. Na przykład tak kodowany jest typ Boolean zawierający dwa identyfikatory reprezentujące wartości prawdy:

Data Bool = Fałsz | PRAWDA

Notatki


Fundacja Wikimedia.

2010.

Ze względów technicznych Bool zostaje przekierowany tutaj. O Boolu możesz przeczytać tutaj: stdbool.h. Typ danych logiczny, boolowski (angielski boolowski lub logiczny typ danych) to prymitywny typ danych w informatyce, który może przyjmować dwa możliwe ... Wikipedia

W teorii programowania dowolny typ, którego wartości są wartościami innych typów, „owiniętymi” przez konstruktory typu algebraicznego. Innymi słowy, algebraiczny typ danych ma zestaw konstruktorów typów, z których każdy... ... Wikipedia

Integer, całkowity typ danych (ang. Integer), w informatyce jeden z najprostszych i najpowszechniejszych typów danych w językach programowania. Używany do reprezentowania liczb całkowitych. Zbiór liczb tego typu to... ... Wikipedia

Typ pierwotny (wbudowany, podstawowy) to typ danych dostarczany przez język programowania jako podstawowa wbudowana jednostka języka. W zależności od języka i jego implementacji zestaw takich typów może się znacznie różnić. Ustala to... ...Wikipedia

Termin ten ma inne znaczenia, patrz Zestaw (znaczenia). Zbiór, typ i struktura danych w informatyce, jest implementacją zbioru obiektów matematycznych. Zestaw typów danych umożliwia przechowywanie ograniczonej liczby wartości... ...Wikipedii

Niektóre języki programowania zapewniają specjalny typ danych dla liczb zespolonych. Obecność wbudowanego typu upraszcza przechowywanie złożonych ilości i obliczenia na nich. Spis treści 1 Arytmetyka na zespołach złożonych 2 Wsparcie w językach... Wikipedia

Aby ulepszyć ten artykuł przez technologia informacyjna pożądane?: Znajdź i uporządkuj w formie przypisów linki do wiarygodnych źródeł potwierdzających to, co jest napisane. Po dodaniu przypisów dodaj dokładniejsze... Wikipedia

Którego zestaw wartości jest ograniczoną listą identyfikatorów.

Encyklopedyczny YouTube

  • 1 / 5

    Typ wyliczeniowy definiuje się jako zestaw identyfikatorów, które w terminologii językowej pełnią tę samą rolę co zwykłe nazwane stałe, ale są powiązane z tym typem. Klasyczny opis typu wyliczeniowego w Pascalu wygląda następująco:

    wpisz Cardsuit = (trefle, karo, kier, pik);

    Tutaj deklarowany jest typ danych Cardsuit, którego wartością może być dowolna z czterech wymienionych stałych. Zmienna typu Cardsuit może przyjmować jedną z wartości trefl, karo, kier, pik; można porównywać wartości typu wyliczeniowego pod kątem równości lub nierówności, a także wykorzystywać je w operatorach selekcji (w przypadku Pascala) jako wartości identyfikujące opcje.

    Stosowanie wyliczeń pozwala na zwiększenie czytelności kodów źródłowych programów, gdyż umożliwiają one zastąpienie „magicznych liczb” kodujących określone wartości czytelnymi nazwami.

    W niektórych językach typy zestawów można tworzyć na podstawie wyliczeń. W takich przypadkach zbiór jest rozumiany (i opisywany) jako nieuporządkowany zbiór unikalnych wartości typu wyliczeniowego.

    Typ wyliczeniowy można stosować w deklaracjach zmiennych i parametrach formalnych funkcji (procedur, metod). Wartości typu wyliczeniowego można przypisywać do odpowiednich zmiennych i przekazywać poprzez parametry odpowiednich typów do funkcji. Ponadto zawsze obsługiwane są porównania wartości typu wyliczeniowego pod kątem równości i nierówności. Niektóre języki obsługują także inne operacje porównywania wartości wyliczonych typów. O wyniku porównania dwóch wyliczonych wartości w takich przypadkach decyduje z reguły kolejność, w jakiej te wartości występują w deklaracji typu - za „mniejszą niż” uważa się wartość, która występuje wcześniej w deklaracji typu wartość, która nastąpi później. Czasami typ wyliczeniowy lub pewien zakres wartości typu wyliczeniowego może być również użyty jako typ indeksu tablicy. W tym przypadku dla każdej wartości z wybranego zakresu w tablicy znajduje się jeden element, a rzeczywista kolejność elementów odpowiada kolejności wartości w deklaracji typu.

    Realizacja

    Zazwyczaj wartości wyliczeniowe są reprezentowane podczas kompilacji za pomocą liczb całkowitych. W zależności od konkretnego języka programowania taka reprezentacja może być albo całkowicie ukryta przed programistą, albo dostępna dla niego przy zastosowaniu pewnych „obejść” (na przykład wymuszenie konwersji wartości wyliczeniowej na wartość całkowitą), albo nawet kontrolowana przez programista (w takich przypadkach programista ma możliwość jednoznacznego określenia, jakimi liczbami będą kodowane wszystkie lub niektóre wartości typu wyliczeniowego). Wszystkie opcje mają swoje pozytywne i negatywne strony. Z jednej strony możliwość wykorzystania wartości liczbowych stałych tworzących typ wyliczeniowy, zwłaszcza jeśli zostanie nadużyta, mija się z celem stosowania tych typów i stwarza ryzyko błędów (w przypadku stosowania wartości liczbowych, dla których w typie nie ma odpowiednich stałych). Z drugiej strony jawne zarządzanie wartością zapewnia pewne dodatkowe możliwości. Na przykład pozwala na użycie typów wyliczeniowych podczas organizowania interfejsu z modułami napisanymi w innych językach, jeśli wykorzystują lub zwracają wartości zakodowane w postaci liczb całkowitych z jakiegoś predefiniowanego zestawu.

    Kolejną możliwością, jaką zapewniają typy wyliczeniowe na poziomie implementacji języka, jest oszczędność pamięci. W przypadku małego typu wyliczeniowego wystarczy kilka bitów do przechowywania wartości tego typu (powyższy typ Cardsuit wymaga tylko dwóch bitów na wartość, podczas gdy standardowa liczba całkowita w większości używanych architektur zajmuje 32 bity – 16 razy więcej), a kompilator może wykorzystać ten fakt, służy do kompresji danych przechowywanych w pamięci. Może to być szczególnie ważne, jeśli w jednym rekordzie przechowywanych jest wiele wartości typu wyliczeniowego – zagęszczanie rekordów podczas przetwarzania ich dużej liczby może zwolnić dużo pamięci. Należy jednak zauważyć, że kompilatory zwykle nie implementują tej funkcji, przynajmniej ostatnio, gdy pamięć komputera stała się znacznie tańsza.

    Krytyka

    Typ wyliczeniowy jest tradycyjny dla rozwiniętych języków programowania, jest dość powszechnie używany i często traktowany jako coś oczywistego. Jednak i ten typ nie jest pozbawiony krytyki ze strony teoretyków i praktyków programowania. Dlatego podczas opracowywania języka programowania Oberon na listę funkcji, które zostały usunięte z języka, włączono przeliczalne typy. Niklaus Wirth, twórca języka, podał następujące powody:

    Z drugiej strony, na przykład w Javie, która początkowo nie zawierała typu wyliczeniowego, typ ten został później wprowadzony ze względu nie tylko na wygodę, ale także na niezawodność: problem używania grup nazwanych stałych zamiast wyliczeń polega na tym, że nie ma brak kontroli ze strony kompilatora nad unikalnością wartości stałych, a także możliwością przypadkowego przypisania wartości do zmiennych, które nie odpowiadają żadnej z tych stałych.

    Opis wyliczeń w różnych językach

    Karta Enum (KLUBY, DIAMENTY, SERCA, PIKI);

    Dynamiczne, słabo typowane języki o składni podobnej do C (takie jak Perl czy JavaScript) generalnie nie posiadają wyliczeń.

    Wyliczone typy

    Typy wyliczeniowe definiują uporządkowane zbiory wartości poprzez wylistowanie identyfikatorów, które te wartości reprezentują. Ich kolejność wynika z kolejności, w jakiej zostały wymienione.

    Składnia

    wpisz nazwę = (id, id, ..., id);

    Notatki

    Identyfikatory w definicji typu stają się stałymi typu wyliczeniowego.

    Pierwsza stała ma numer seryjny 0, druga - 1 i tak dalej.

    Typy wyliczeniowe są podklasą porządkowy typy.

    Przykład

    wpisz kolor = (trefle, karo, kier, pik);

    Zadeklarowana w ten sposób Hearts jest stałą typu Suit.

    Standardowa funkcja Ord zwraca liczbę porządkową wyliczonej stałej. W tym przykładzie

    Ord(Trefle) = 0
    Ord(Diamenty) = 1
    Ord(kiery) = 2

    Ada

    typ dnia to (pon., wt., śr., czw., pt., sob., niedz.);
    typ koloru to (trefle, karo, kier, pik);
    typ Kolor to (biały, czerwony, żółty, zielony, niebieski, brązowy, czarny);
    typ Światło to (czerwony, bursztynowy, zielony); -- Czerwony i Zielony są przeciążone

    W przeciwieństwie do Borland Pascal, identyfikatory w definicji typu stają się funkcjami, a nie stałymi. To pozwala na ich przeciążenie. W przeciwnym razie zachowanie tych funkcji jest całkowicie podobne do stałych.



2024 O komforcie w domu. Gazomierze. System ogrzewania. Zaopatrzenie w wodę. System wentylacji