Глава 12 Выражения

На верх  Назад  Вперёд

Выражения используются в присваиваниях или проверках. Выражения продуцируют значения определенного типа. Выражения строятся с двумя компонентами: операторы и их операнды. Обычно операторы является бинарными, т.е. требует двух операндов. Бинарные операторы происходят всегда между операндами (например X/Y). Иногда оператор унарный, т.е. он требует только один аргумент. Унарный оператор всегда происходит перед операндом (например -X).

При использовании нескольких операндов в выражении, учитывается их приоритет (правила приоритета показаны в таблице 12.1).


Таблица 12.1: Приоритет операторов

Оператор

Приоритет

Категория

Not, @

Самый высокий (первый)

Унарные операторы

* / div mod and shl shr as << >>

Второй

Операторы умножения

+ - or xor

Третий

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

= <> < > <= >= in is

Самый низкий (последний)

Операторы отношения


При определении приоритета, используются следующие правила:

1.В операциях с неравными приоритетом операнды принадлежат к оператору с наивысшим приоритетом. Например, в выражении 5*3+7, умножение имеет больший приоритет, чем сложение, так что он выполняется в первую очередь. Результатом будет 22.

2.Если в выражении используются круглые скобки, их содержимое вычисляется в первую очередь. Таким образом, 5*(3+7) будет равно 50.

Примечание:

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

Таким образом, в следующем выражении:

a := g(3) + f(2);

f(2), может быть выполнено, раньше чем g(3). Такое поведение заметно отличается от Delphi или Turbo Pascal.

Если одно выражение должно быть выполнено перед другим, необходимо разделить выражения используя временные результаты:

e1:=g(3);

a:=e1+f(2);

Примечание:

Оператор экспоненты (**) доступен для перегрузки, но не определено ни по одному из стандартных типов Pascal (вещественных и/или целых чисел).

12.1 Синтаксис выражений

12.2 Вызов функций

12.3 Конструкторы множеств

12.4 Приведение типов значений

12.5 Приведения типов переменной

12.6 Приведение невыровненых типов

12.7 Оператор @

12.8 Операторы

12.8.1 Арифметические операторы

12.8.2 Поразрядные логические операторы

12.8.3 Логические операторы (однобитовые)

12.8.4 Строковый оператор

12.8.5 Операторы действий над множествами

12.8.6 Операторы отношения

12.8.7 Операторы действий над классами