Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoria 158783 .doc
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
1.72 Mб
Скачать

Оператор присоединения With

При работе с полями в их составном имени необходимо писать путь к полю через все уровни иерархии, начиная от полного имени записи. С учетом того, что количество уровней иерархии может достигать девяти, составное имя поля может содержать девять компонент. Работа с такими именами неудобна, а программа оказывается очень громоздкой.

Для сокращения составного имени поля может быть использован оператор присоединения With. Данный оператор имеет формат, который содержит Рисунок 3 .27.

Рисунок 3.27 – Синтаксическая диаграмма

оператора присоединения

На данном рисунке <Оператор> - это любой оператор языка, допустимый для соответствующих типов полей.

В операторе With указывается список переменных типа Record.

Оператор With облегчает доступ к полям этих записей и минимизирует повторные адресные вычисления. Внутри <Оператора>, вложенного в оператор With, к полям этих записей можно обращаться как к простым переменным.

Пример 3.6.

В примере 3.2 объявлена переменная D1: Data. Используя оператор With, вместо примера 3.3 можно записать:

With D1 Do

Begin

God:=1970;

Mes:=Yan;

Den:=15

End;

Пример 3.7.

Используя оператор With, к полям записи An1 (см. пример 3.2) можно обратиться следующим образом:

With An1 Do

Begin

Fio.Fam := ’Иванов’;

Fio.Im := ’Петр’;

Fio.Ot := ’Степанович’;

Pol := Man;

Data_R.God := 1970;

Data_R.Mes := Yan;

Data_R.Den := 25;

Prof := ’Студент’

End;

Без применения оператора With перед всеми именами полей необходимо было бы написать имя записи An1.

Адрес переменной типа Record вычисляется до выполнения оператора With. Любые модификации переменных, влияющие на вычисленное значение адреса, до завершения оператора With не отражаются на значении вычисленного ранее адреса.

Указание списка переменных типа запись в операторе With (см. предыдущую синтаксическую диаграмму) является сокращенной формой оператора With. Сокращенная форма оператора:

With Z1, Z2, Z3, … , Zn Do <Оператор>

эквивалентна следующей полной форме оператора With:

With Z1 Do

With Z2 Do

With Z3 Do

. . .

With Zn Do <Оператор>

Из полной формы оператора With видно, что идентификатор поля в <Операторе> обозначает компонент записи из ближайшего объемлющего оператора With, в котором указана переменная с таким полем.

Пример 3.8.

Применительно к примеру 3.2 для полного устранения необходимости в составных именах полей (см. пример 3.7) может быть использована следующая сокращенная форма оператора With:

With An1, Fio, Data_R Do

Begin

Fam := ’Иванов’;

Im := ’Петр’;

Ot := ’Степанович’;

Pol := Man;

God := 1970;

Mes := Yan;

Den := 25;

Prof := ’Студент’;

End;

Если две переменные из списка записей оператора With имеют поля с одним и тем же идентификатором, то внутри оператора With этот идентификатор обозначает поле той переменной, которая указана в списке позже.

Имена отдельных полей записи в программе могут совпадать с именами переменных. Имя переменной в операторе With недоступно.

Пример 3.9.

Использование совпадающих идентификаторов.

Var

{Запись}

V: Record

V2: Integer;

V1: Record

A: Real

End;

A: Integer

End;

{Переменная}

A: Char;

. . .

With V, V1 Do

Begin

V2 := 1; {значение поля V.V2 равно 1}

A := 1.0; {значение поля V.V1.A равно 1.0}

V.A := 1; {значение поля V.A равно 1}

End;

A := ’A’;

В данном примере есть три элемента с именем А – поля V.V1.A, V.A и переменная А типа Char. Указание имени поля А в <Операторе> оператора With приведет к обращению к полю V.V1.A, поскольку поле А содержится в записи V1, находящейся в списке записей сокращенной формы оператора With после записи V. Чтобы обратиться к полю V.A, нужно использовать его составное имя или вынести оператор, работающий с данным полем, за пределы оператора With.

За пределами оператора With поля записи становятся недоступными, а переменная А типа Char становится доступной.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]