Porządkowe i wyliczeniowe typy danych dla Delphi

Ręka dotykająca ekranu pełnego różnych ikon.

geralt/Pixabay





Delphi język programowania jest przykładem silnie typowanego języka. Oznacza to, że wszystkie zmienne muszą być jakiegoś typu. Typ jest zasadniczo nazwą rodzaju danych. Kiedy deklarujemy zmienną, musimy określić jej typ, który określa zbiór wartości, które zmienna może przechowywać oraz operacje, które można na niej wykonać.

Wiele wbudowanych typów danych Delphi, takich jak Integer lub Strunowy , można doprecyzować lub połączyć w celu utworzenia nowych typów danych. W tym artykule zobaczymy, jak tworzyć niestandardowe porządkowe typy danych w Delfy .



Typy porządkowe

Charakterystyczne cechy porządkowych typów danych to: muszą składać się ze skończonej liczby elementów i muszą być w jakiś sposób uporządkowane.

Najczęstszymi przykładami porządkowych typów danych są wszystkie typy Integer oraz Char iBoole'arodzaj. Dokładniej, Object Pascal ma 12 predefiniowanych typów porządkowych: Integer, Shortint, Smallint, Longint, Byte, Word, Cardinal, Boolean, ByteBool, WordBool, LongBool i Char. Istnieją również dwie inne klasy typów porządkowych zdefiniowanych przez użytkownika: typy wyliczeniowe i typy podzakresów.



W każdym typie porządkowym musi mieć sens przechodzenie wstecz lub do przodu do następnego elementu. Na przykład rzeczywiste typy nie są porządkowe, ponieważ poruszanie się wstecz lub do przodu nie ma sensu. Pytanie „Jaki jest następny prawdziwy po 2.5?” jest bez znaczenia.

Ponieważ z definicji każda wartość z wyjątkiem pierwszej ma unikalnego poprzednika, a każda wartość z wyjątkiem ostatniej ma unikalnego następcę, kilka predefiniowanych Funkcje są używane podczas pracy z typami porządkowymi:

Funkcjonować Efekt
Porządek (X) Daje indeks elementu
Pred(X) Przechodzi do elementu wymienionego przed X w typie
Succ(X) Przechodzi do elementu wymienionego po X w typie
Dec(X;n) Cofa n elementów (jeśli n jest pominięte, cofa się o 1 element)
Inc(X;n) Przesuwa n elementów do przodu (jeśli n jest pominięte, przesuwa o 1 element do przodu)
Niski(X) Zwraca najniższą wartość z zakresu porządkowego typu danych X
Wysoki(X) Zwraca najwyższą wartość z zakresu porządkowego typu danych X


Na przykład High(Byte) zwraca 255, ponieważ najwyższa wartość typu Byte to 255, a Succ(2) zwraca 3, ponieważ 3 jest następcą 2.

Uwaga: Jeśli spróbujemy użyć Succ, gdy na ostatnim elemencie Delphi wygeneruje awyjątek czasu wykonywaniaczy sprawdzanie zasięgu jest włączone.



Typ wyliczeniowy Delphi

Najłatwiejszym sposobem utworzenia nowego przykładu typu porządkowego jest po prostu wylistowanie kilku elementów w określonej kolejności. Wartości nie mają własnego znaczenia, a ich kolejność jest zgodna z kolejnością, w jakiej wymienione są identyfikatory. Innymi słowy, wyliczenie to lista wartości.

|_+_|

Po zdefiniowaniu wyliczanego typu danych możemy zadeklarować zmienne tego typu:



|_+_|

Podstawowym celem wyliczanego typu danych jest wyjaśnienie, jakie dane są twojeprogrambędzie manipulować. Typ wyliczeniowy to tak naprawdę tylko skrócony sposób przypisywania wartości sekwencyjnych do stałych. Biorąc pod uwagę te deklaracje, wtorek jest stałą typu Dni tygodnia .

Delphi pozwala nam pracować z elementami w typie wyliczeniowym przy użyciu indeksu pochodzącego z kolejności, w jakiej zostały wymienione. W poprzednim przykładzie poniedziałek w Dni tygodnia deklaracja typu ma indeks 0, wtorek ma indeks 1 i tak dalej. Funkcje wymienione w powyższej tabeli pozwalają nam na przykład użyć Succ(piątek), aby „iść do” soboty.



Teraz możemy spróbować czegoś takiego:

|_+_|

Biblioteka komponentów wizualnych Delphi używa w wielu miejscach typów wyliczanych. Na przykład pozycja formularza jest zdefiniowana w następujący sposób:



|_+_|

Używamy Position (poprzez Object Inspector), aby uzyskać lub ustawić rozmiar i położenieFormularz.

Rodzaje podzakresów

Mówiąc najprościej, typ podzakresu reprezentuje podzbiór wartości w innym typie porządkowym. Ogólnie możemy zdefiniować dowolny podzakres, zaczynając od dowolnego typu porządkowego (w tym zdefiniowanego wcześniej typu wyliczeniowego) i używając podwójnej kropki:

|_+_|

Tutaj TWorkDays zawiera wartości poniedziałek, wtorek, środa, czwartek i piątek.

To wszystko — teraz idź wyliczyć!