A structure ( called a record in some other programming languages ) is a way of collecting together a set a related values - such as name, age and employee number. Each element in a structure can be a different data type ( including another structure type ).
Syntax of a Structure Definition
The general form of a structure definition is :-
struct_field := [ Const ] type_spec identifier [ = expression ] structure_def := Type identifier = { struct_field [[ , struct_field ]] } ;
Here are some examples :-
Type TAge = { Number years, Number months }; Type TStaffRec = { Number emp_id, Text name, TAge age };
Declaring a Structure
A variable with a structure type can be declared like any other type of variable.
TAge myage; TStaffRec myrecord;
Using Structure
A structure can be treated as a single block and have a value assigned to it. When setting a value to a structure the fields should be listed between braces - the simplest way is to just list a set of values in the order in which the fields were defined.
myage := { 25, 6 }; [= 25 years and 6 months - ( I wish! ) =] myrecord := { 1001, "Robin", myage };
You could even do the following :-
myrecord := { 1001, "Robin", { 25, 6 } };
Accessing Individual Fields
It is possible to access a specific field using the 'dot' operator.
[= change the name field =] myrecord.name := "Fred";
If you have a nested structure you can access a nested field in a similar way.
[= change the year field within the age field =] myrecord.age.years := 30;
Constant Fields
It is possible to flag an individual field as constant. In this case the field can be changed when the whole record changes ( providing the target is not itself flagged as constant ) but the individual field cannot be changed.
Type MyStruct = { Number id = 100, Const Text name = "Robin", Text addr }; Program() MyStruct myrecord; Begin [= can change name as part of record =] myrecord := { 101, "Bill", "10 Station Road" }; [= cannot change constant field =] myrecord.name:= "William"; [= *** ERROR *** =] End;