Содержание
Доступ к полям
Обратиться к полю записи можно следующим способом:
<имя_записи>.<имя_поля>
Например:
Как уже было упомянуто, коллизий между переменной с именем month и полем записи my_birthday.month не возникает.
Доступ к полю двумерной таблицы осуществляется аналогичным образом (жирные скобки являются обязательным элементом синтаксиса):
<имя_таблицы>[<индекс>].<имя_поля>
Эту запись можно трактовать так:
(<имя_таблицы>[<индекс>]).<имя_поля>
Например:
Оперирование несколькими полями
Если программе предстоит несколько раз подряд обращаться к полям одной и той же записи, может оказаться неудобным записывать это обращение полностью:
my_birthday.month:= 3;
my_birthday.year:= 2004;
Для сокращения таких участков служит оператор with, позволяющий обращаться к полям, не указывая каждый раз имя всей записи:
with <имя_записи> do begin <операторы> { имена полей здесь используются как <имя_поля>, а не как <имя_записи>.<имя_поля>} end;
Например:
begin
day := 17;
month := 3;
year := 2004;
end;
Замечание. Для того чтобы внутри оператора with можно было обратиться не к полю записи, а к глобальной переменной с таким же именем, перед этой переменной нужно указать (через точку) имя программы: <имя_программы>.<имя_переменной>.
Например:
begin
day := 17;
month := 3; {поле записи birthday.month}
year := 2004;
programma.month := 5; {глобальная переменная month}
end;
Вложенные операторы with
Если возникает необходимость расположить один оператор with внутри другого, то любую переменную (если перед ней явно не указано имя записи), находящуюся под внутренним оператором with, компилятор пытается интерпретировать в такой последовательности:
- если во внутренней записи есть поле с искомым именем, то поиск заканчивается;
- если во внутренней записи поля с таким именем нет, то поиск производится среди полей внешней записи (если вложенных операторов with больше, чем два, то поиск ведётся последовательно во всех задействованных записях в направлении «изнутри наружу»);
- если среди полей всех вложенных записей нет искомого идентификатора, компилятор считает его глобальной переменной.
Например:
day : 1..31;
month : 1..12;
year : 1900..2005;
end;
student = record
name : string[100];
year : 1950 .. 2005; {год поступления}
gruppa : string[5];
birth : date;
end;
var ivanov : student;
begin
{...}
with ivanov do
begin
{...}
with birth do
begin
{...}
year := 2001; {birth.year}
gruppa := 'IT01'; {ivanov.gruppa}
{...}
end;
{...}
end;
end;