Typ będący złożoną strukturą, logicznie powiązanych z sobą zmiennych dowolnego typu traktowanych jako nierozłączna całość. Zmienne wchodzące w skład rekordu nazywane się polami.
Deklaracja rekordu jako typu
Typ rekordowy deklaruje się w bloku type programu lub modułu. Schemat deklaracji typu rekordowego:
IdentyfikatorTypu = record Indentyfikator1 : typ; Indentyfikator2 : typ; Indentyfikator3 : typ; ... IndentyfikatorN : typ; end;
Gdzie:
- IdentyfikatorTypu to nazwa identyfikująca deklarowany typ
- Identyfikator1, Identyfikator2, Identyfikator3 … IdentyfikatorN to nazwy kolejnych pól
- typ to dowolny typ pola
Przykład:
TOsoba = record Imie, Nazwisko : string; Adres : TAdres; Wiek : integer; Wzrost : integer; end;
Deklaracja rekordu jako zmiennej
FreePascal oraz Delphi pozwalają na deklarację rekordu bez potrzeby deklarowania nowego typu danych, bezpośrednio w bloku var. Schematycznie wygląda to następująco:
IdentyfikatorZmiennej : record Pole1 : Typ; Pole2 : Typ; ... PoleN : typ end;
Dostęp do pól rekordu
Aby uzyskać dostęp do zawartości pola rekordu, należy użyć operatora kropki między identyfikatorem rekordu a identyfikatorem pola.
Przykład:
var OsobaFoo : TOsoba; begin OsobaFoo.Imie :='Jan'; OsobaFoo.Nazwisko :='Kowalski'; WriteLn(OsobaFoo.Imie, OsobaFoo.Nazwisko); end.
Rekord z wariantami
Rekord z wariantami to rekord, którego część (lub całość) układu pól zależna jest od wartości pola znacznikowego. Rekord z wariantami składa się z części stałej (zawierającej pola niezależne od wariantu) oraz części zmiennej, będącej deklaracją pól wariantowych (pól zależnych od wariantu). Deklaracja pól wariantowych musi zawsze znajdować się na końcu deklaracji rekordu.
Schemat deklaracji:
TIdentyfikator = record Identyfikator1 : Typ; Identyfikator2 : Typ; Identyfikator3 : Typ; ... case Pole_znacznikowe : TypPorzadkowy of Wartosc1 : (Pole1 : Typ, Pole2 : Typ, ...); Wartosc2 : (PoleA : Typ, PoleB : Typ, ...); ... WartoscN : (PoleFoo : Typ, PoleBar : Typ, ...); end;
Gdzie:
- TIdentyfikator to identyfikator nowego typu
- Identyfikator1, Identyfikator2, Identyfikator3 to identyfikator pól stałych
- Typ to dowolny typ pola
- Pole_znacznikowe to identyfikator pola znacznikowego. Pole znacznikowe musi być typu porządkowego!
- Wartosc1, Wartosc2, WartoscN to wariant wartości pola znacznikowego
- Pole1, Pole2, PoleA itd. to identyfikatory pól wariantowych, dla danej wartości pola znacznikowego.
Przykład:
type TPozycjaTyp = (KSIAZKA, WITRYNA, INNE);TPozycja = record Tytul : string[30]; Autor : string[30]; case Typ : TPozycjaTyp of KSIAZKA : (ISBN : Longint; Wydawnictwo : string[30]); WITRYNA : (Adres : string[30]; Licencja : string[3]); end; var Item1 : TPozycja; begin Item1.Tytul := 'Westwolf na tropie gibonów'; Item1.Autor := 'Gipki Gibon'; Item1.Typ := KSIAZKA; Item1.ISBN := 1111111111; Item1.Wydawnictwo := 'NOWA ERA'; WriteLn(Item1.ISBN); end.
Istnieje również możliwość deklaracji rekordu wariantowego bez dostępu do pola znacznikowego. Deklaruje się go pomijając identyfikator pola znacznikowego.
Przykład :
TLongNumer = record case byte of 1: (LongNumber : LongInt); 2: (Li, Hi : integer); end;
Rozmiar rekordu
Rozmiar zajmowanej pamięci przez rekord składający się tylko z pól stałych, jest równy sumie rozmiarów jego pól.
W rekordach z wariantami, pamięć rezerwowana dla pól wariantowych jest równa wariantowi, którego łączny rozmiar pól, jest największy. Całkowity rozmiar pamięci rezerwowanej dla rekordu z wariantami jest równa sumie pamięci rezerwowanej dla pól stałych, pola znacznikowego oraz pól wariantowych.
Oznacza to, że w danym momencie tylko jeden wariant pól, wskazywany przez pole znacznikowe, pozwala odczytać poprawne dane przechowywane przez rekord. Odczyt lub przypisanie wartości polu z poza aktywnego wariantu, może być przyczyną błędu logicznego.

0 Odpowiedzi do “Typ rekordowy”