Описание языка PascalABC.NET | страница 32
Для последовательностей доступны также стандартные функции обработки последовательностей.
Записи
Запись представляет собой набор элементов разных типов, каждый из которых имеет свое имя и называется полем записи. Тип записи в классическом языке Паскаль описывается следующим образом:
record
описания полей
end
где описания полей имеет такой же вид, что и раздел описания переменных без ключевого слова var.
Например:
type
Person = record
Name: string;
Age: integer;
end;
Переменные типа запись хранят в непрерывном блоке памяти значения всех полей записи.
Для доступа к полям записей используется точечная нотация:
var p: Person;
begin
p.Name := 'Иванов';
p.Age := 20;
writeln(p); // (Иванов,20)
end.
По умолчанию процедура write выводит содержимое всех полей записи в круглых скобках через запятую.
В PascalABC.NET внутри записей допустимо определять методы и свойства, а также использовать модификаторы доступа. Таким образом, описание записи в PascalABC.NET имеет вид:
record
секция1
секция2
...
end
Каждая секция имеет вид:
модификатор доступа
описания полей
объявления или описания методов и описания свойств
Модификатор доступа в первой секции может отсутствовать, в этом случае подразумевается модификатор public (все члены открыты).
Например:
type
Person = record
private
Name: string;
Age: integer;
public
constructor Create(Name: string; Age: integer);
begin
Self.Name := Name;
Self.Age := Age;
end;
procedure Print;
end;
procedure Person.Print;
begin
writelnFormat('Имя: {0} Возраст: {1}', Name, Age);
end;
Как и в классах, методы могут описываться как внутри, так и вне тела записи. В примере выше конструктор описывается внутри записи, а метод Print объявляется внутри, а описывается вне тела записи. Метод-конструктор всегда имеет имя Create и предназначен для инициализации полей записи.
При описании переменной или константы типа запись можно использовать инициализатор записи (как и в Delphi Object Pascal):
const p: Person = (Name: 'Петрова'; Age: 18);
var p: Person := (Name: 'Иванов'; Age: 20);
Конструкторы для записей имеют тот же синтаксис, что и для классов. Однако, в отличие от классов, вызов конструктора записи не создает новый объект в динамической памяти, а только инициализирует поля записи:
var p: Person := new Person('Иванов',20);
Более традиционно в записи определяется обычный метод-процедура, традиционно с именем Init, инициализирующая поля записи: