While simple data structures such as arrays or sets consist of elements all of the same type, a record can consist of a number of elements of different types, and can take on a huge complexity. Each separate part of a record is referred to as a field.
The record is reserved word.
type TMember = record firstname, surname : string; address: array [1..3] of string; phone: string; birthdate: TDateTime; paidCurrentSubscription: boolean end;
And even more complex structures are possible, eg:
type maritalStates = (single, married, widowed, divorced); TPerson = record // CONSTANT PART // of course records may be nested name: record first, middle, last: string; end; sex: (male, female); // date of birth dob: TDateTime; // VARIABLE PART case maritalStatus: maritalStates of single: ( ); married, widowed: (marriageDate: TDateTime); divorced: (marriageDate, divorceDate: TDateTime; isFirstDivorce: boolean) end;
The fields of the variable part are only available after assignment of its depending variable. It doesn't harm, whether the field marriageDate is defined multiple times.
Individual fields are accessed by placing a dot between the record name and the field name thus:
a.firstname := 'George'; a.surname := 'Petersen'; a.phone := '789534'; a.paidCurrentSubscription := true;
Alternatively, the whole series of fields can be made available together using the with-construct:
with a do begin firstname := 'George'; surname := 'Petersen'; phone := '789534'; paidCurrentSubscription := true end;
A record is treated by the program as a single entity, and for example a whole record can be copied (provided the copy is of the same type) thus:
var a, b: TMember; (* main program *) begin // ... assign values to the fields in record a b := a // Now b holds a _copy_ of a. // Do not get confused with references: // a and b still point to _different_ _entities_ of TMember.end.
type // record definition TSpecialDay = record dayName: string; month: integer; day: integer; end; const // TSpecialDay constant christmasDay: TSpecialDay = ( dayName: 'Christmas Day'; month: 12; day: 25; );
|simple data types|
|complex data types|