Оператор цикла с параметром With

В операциях над записями оператор with удобно использовать для краткого обращения к полям записи. В операторе with к полям одной или более конкретных переменных типа запись можно обращаться, используя только идентификаторы полей. Оперaтор with имеет следующий синтаксис:

Возьмем следующее описание:

type

TDate = record

Day: Integer:

Month: Integer;

Year: Integer: end;

var OrderDate: TDate;

С учетом данного описания приведем пример оператора with:

with OrderDate do

if Month = 12 then

begin

Month:= 1;

Year:= Year + 1 end else

Month:= Month + 1;

Это эквивалентно следующему:

if OrderDate.Month = 12 then

begin

OrderDate.Month:= 1;

OrderDate.Year:= TDate.Year + 1 end

Else

Date.month:= TDate.Month + 1;

В операторе with сначала производится проверка каждой ссылки на переменную, а именно: можно ли ее интерпретировать, как поле записи. Если это так, то она всегда интерпретируется именно таким образом, даже если имеется доступ к переменной с тем же именем.

Допустим описаны следующие переменные:

type

TPoint = record

x,y: Integer;

end;

var

x: Point;

y: Integer;

В этом случае и к x, и к y можно обращаться, как к переменной или как к полю записи. В операторе:

with x do

begin

x:= 10;

y:= 25;

end;

x между ключевыми словами with и dо относится к переменной типа

указатель, а в составном операторе x и y ссылаются на x.x и y.y.

Оператор:

with V1,V2,...Vn do s;

эквивалентен операторам:

with V1 do

with V2 do

...

with Vn do

S;

В обоих случаях, если Vn является полем и v1, и v2, то она интерпретируется как v2.Vn, а не как v1.Vn.

Если выборка переменной типа запись связана с индексированием массива или разыменованием указателя, то эти действия производятся до того, как будет выполняться составной оператор.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: