Выбрать главу

var m := new My(5);

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

Операции typeof и sizeof

Операция sizeof(имя типа) возвращает для этого типа его размер в байтах.

Операция typeof(имя типа) возвращает для этого типа объект класса System.Type. Приведем пример использования typeof:

type

Base = class ... end;

Derived = class(Base) ... end;

var b: Base := new Derived;

begin

writeln(b.GetType = typeof(Derived));

end.

Операция явного приведения типов

Операция явного приведения типов имеет вид

ИмяТипа(выражение)

и позволяет преобразовать выражение к типу ИмяТипа. Тип выражения и тип с именем ИмяТипа должны оба принадлежать либо к порядковому типу, либо к типу указателя, либо один тип должен быть наследником другого, либо тип выражения должен поддерживать интерфейс с именем ИмяТипа. В случае указателей запрещено преобразовывать типизированный указатель к типу указателя на другой тип.

Пример.

type

pinteger = ^integer;

Season = (Winter,Spring,Summer,Autumn);

var i: integer;

b: byte;

p: pointer := @i;

s: Season;

begin

i := integer('z');

b := byte(i);

i := pinteger(p);

s := Season(1);

end.

При приведении размерных типов к типу Object происходит упаковка.

Пример.

var i: integer := 5;

begin

var o: Object := Object(i);

end.

Приоритет операций

Приоритет определяет порядок выполнения операций в выражении. Первыми выполняются операции, имеющие высший приоритет. Операции, имеющие одинаковый приоритет, выполняются слева направо.

Таблица приоритетов операций

@, not, ^, +, - (унарные), new

1 (наивысший)

*, /, div, mod, and, shl, shr, as, is

2

+, - (бинарные), or, xor

3

=, <>, <, >, <=, >=, in, =

4 (низший)

Для изменения порядка выполнения операций в выражениях используются скобки.

Операторы

Операторы: обзор

В PascalABC.NET определены следующие операторы.

Операторы присваивания

Составной оператор

Оператор описания переменной

Оператор цикла for

Оператор цикла foreach

Операторы цикла while и repeat

Условный оператор if

Оператор выбора варианта case

Оператор вызова процедуры

Оператор try except

Оператор try finally

Оператор raise

Операторы break, continue и exit

Оператор goto

Оператор lock

Оператор with

Пустой оператор

Оператор присваивания

Оператор присваивания имеет вид:

переменная := выражение

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

Оператор присваивания заменяет текущее значение переменной значением выражения.

Например:

i := i + 1; // увеличивает значение переменной i на 1

В PascalABC.NET определены также операторы присваивания со значками +=, -=, *=, /=. Для числовых типов действие данных операторов описано здесь. Кроме того, использование операторов += и *= для строк описано здесь и операторов +=, -= и *= для множеств - здесь. Их действие для процедурных переменных описано здесь.

Операторы +=, -=, *=, /= имеют следующий смысл: a #= b означает a := a # b, где # - знак операции +, -, *, /.

Например:

a += 3; // увеличить a на 3

b *= 2; // увеличить b в 2 раза

Опертор /= неприменим, если выражение слева - целое.

Операторы +=, -=, *=, /= могут также использоваться со свойствами классов соответствующих типов в левой части.

Составной оператор (блок)

Составной оператор предназначен для объединения нескольких операторов в один. Он имеет вид:

begin

операторы

end

В PascalABC.NET составной оператор также называется блоком. (традиционно в Паскале блоком называется раздел описаний, после которого идет составной оператор; в PascalABC.NET принято другое решение, поскольку можно описывать переменные непосредственно внутри составного оператора).Операторы отделяются один от другого символом ";". Ключевые слова begin и end, окаймляющие операторы, называются операторными скобками.

Например:

s := 0;

p := 1;

for var i:=1 to 10 do

begin

p := p * i;

s := s + p

end

Перед end также может ставиться ;. В этом случае считается, что последним оператором перед end является пустой оператор, не выполняющий никаких действий.

Помимо операторов, в блоке могут быть внутриблочные описания переменных:

begin

var a,b: integer;

var r: real;

readln(a,b);

x := a/b;

writeln(x);

Пустой оператор

Пустой оператор не включает никаких символов, не выполняет никаких действий и используется в двух случаях:

1. Для использования символа ; после последнего оператора в блоке:

begin

a := 1;

b := a;

end

Поскольку в языке Паскаль символ ; разделяет операторы, то в приведенном выше коде считается, что после последней ; находится пустой оператор. Таким образом, ; перед end в блоке можно либо ставить, либо нет. 1. Для пометки места, следующего за последним оператором в блоке::

label a;

begin

goto a;

x := 1;

a:

end

Условный оператор

Условный оператор имеет полную и краткую формы.

Полная форма условного оператора выглядит следующим образом:

if условие then оператор1

else оператор2

В качестве условия указывается некоторое логическое выражение. Если условие оказывается истинным, то выполняется оператор1, в противном случае выполняется оператор2. Краткая форма условного оператора имеет вид: