Zrozumienie i używanie typów danych rekordów w Delphi

Młody człowiek surfujący po sieci

Obrazy BJI/Blue Jean/Getty Images





Zestawy są w porządku,Załóżmy, że chcemy stworzyć trzy jednowymiarowe tablice dla 50 członków naszej społeczności programistów. Pierwsza tablica zawiera nazwiska, druga adresy e-mail, a trzecia liczba wgrywanych (komponentów lub aplikacji) do naszej społeczności.

Każda tablica (lista) miałaby pasujące indeksy i mnóstwo kodu do równoległego utrzymywania wszystkich trzech list. Oczywiście moglibyśmy spróbować z jedną trójwymiarową tablicą, ale co z jej typem? Potrzebujemy ciągu znaków na nazwiska i adresy e-mail, ale liczbę całkowitą określającą liczbę przesłanych plików.



Sposobem na pracę z taką strukturą danych jest użycie Delphi struktura rekordu .

Członek = Nagraj ...

Na przykład poniższa deklaracja tworzy typ rekordu o nazwie TMember, którego moglibyśmy użyć w naszym przypadku.



Zasadniczo struktura danych rekordu może mieszać dowolne wbudowane typy Delphi w tym wszelkie utworzone przez Ciebie typy. Typy rekordów definiują stałe kolekcje elementów różnych typów. Każda pozycja, lub pole , jest jak zmienna składająca się z nazwy i typu.

Typ TMember zawiera trzy pola: wartość ciągu o nazwie Name (do przechowywania nazwy członka), wartość typu ciągu o nazwie eMail (dla jednego e-maila) oraz liczbę całkowitą (Kardynał) o nazwie Posts (do przechowywania numeru zgłoszeń do naszej społeczności).

Po ustawieniu typu rekordu możemy zadeklarować zmienną typu TMember. TMember jest teraz tak samo dobrym typem zmiennej dla zmiennych, jak każdy z Delfówwbudowane typy, takie jak String lub Integer. Uwaga: deklaracja typu TMember nie alokuje pamięci na pola Name, eMail i Posts;

Aby faktycznie utworzyć instancję rekordu TMember musimy zadeklarować zmienną typu TMember, jak w poniższym kodzie:



Teraz, gdy mamy rekord, używamy kropki do wyizolowania pól DelphiGuide.

Uwaga: powyższy fragment kodu można przepisać za pomocą z słowo kluczowe .



Możemy teraz skopiować wartości pól DelphiGuide do AMember.

Zakres i widoczność rekordu

Typ rekordu zadeklarowany w deklaracji formularza (sekcji implementacji), funkcji lub procedury ma zasięg ograniczony do bloku, w którym jest zadeklarowany. Jeśli rekord jest zadeklarowany w sekcji interfejsu jednostki, jego zakres obejmuje wszelkie inne jednostki lub programy korzystające z jednostki, w której występuje deklaracja.



Tablica zapisów

Ponieważ TMember działa jak każdy inny typ Object Pascal, możemy zadeklarować tablicę zmiennych rekordów:

Uwaga: Oto jak to zrobić zadeklaruj i zainicjuj stałą tablicę rekordów w Delphi .



Rekordy jako pola rekordów

Ponieważ typ rekordu jest zgodny z prawem, jak każdy inny typ Delphi, możemy mieć pole rekordu, które jest samym rekordem. Na przykład możemy utworzyć ExpandedMember, aby śledzić, co członek przesyła wraz z informacjami o członku.

Wypełnienie wszystkich informacji potrzebnych do pojedynczego rekordu jest teraz nieco trudniejsze. Więcej kropek (kropek) jest wymaganych, aby uzyskać dostęp do pól TExpandedMember.

Nagrywaj z „nieznanymi” polami

Typ rekordu może mieć część wariantu (nie mylić ze zmienną typu Variant). Rekordy wariantów są używane na przykład wtedy, gdy chcemy utworzyć typ rekordu, który zawiera pola dla różnych rodzajów danych, ale wiemy, że nigdy nie będziemy musieli używać wszystkich pól w jednej instancji rekordu. Aby dowiedzieć się więcej o częściach Variant w Rekordach, zajrzyj do plików pomocy Delphi. Użycie wariantowego typu rekordu nie jest bezpieczne dla typu i nie jest zalecaną praktyką programistyczną, szczególnie dla początkujących.

Jednak rekordy wariantów mogą być bardzo przydatne, jeśli kiedykolwiek znajdziesz się w sytuacji, aby z nich skorzystać.