Перейти к основному содержимому
Версия: 4.x

Выражения

Выражение - это комбинация операторов-свойств и параметров. При вычислении выражения последовательно в порядке приоритетов выполняются все операторы.

Значением выражения будем называть возвращаемое значение свойства, получившегося в результате выполнения операторов, либо значение параметра, если выражение являлось одиночным параметром.

Выражение можно описать набором следующих рекурсивных правил:

ПравилоОписание
expression := parameter | constant | prefixOperatorОдиночный параметр, константа или префиксный неарифметический оператор
expression := prefixArithmOp expressionУнарный префиксный арифметический оператор, с переданным ему в качестве операнда выражением
expression := expression postfixOpУнарный постфиксный оператор, с переданным ему в качестве операнда выражением
expression := expression binaryOp expressionБинарный оператор с переданными ему в качестве операндов выражениями
expression := ( expression )Выражение в круглых скобках

В состав выражения не могут входить контекстно-независимые операторы-свойства.

Примеры

CLASS Team;

wins(team) = DATA INTEGER(Team);
ties(team) = DATA INTEGER(Team);

// Количество очков, полученное командой за сыгранные матчи
points(Team team) = wins(team) * 3 + ties(team);
// В данном случае выражение записано справа от знака равенства. Оно определяет новое свойство points.
// При вычислении выражения сначала выполнятся два оператора JOIN: wins(team) и ties(team), подставив
// параметр team в свойства wins и ties. Затем выполнится оператор умножения, который построит свойство,
// возвращающее число, равное произведению возвращаемого значения wins(team) и числа 3. Затем выполнится
// оператор сложения, который создаст свойство, суммирующее возвращаемые значения (wins(team) * 3) и ties(team).
// Получившееся свойство и будет являться результатом выполнения выражения.

CLASS Game;
CLASS BonusGame : Game;

// Количество очков за игру. Если игра бонусная, то 3, иначе 2.
gamePoints(Game game) = 2 (+) (1 IF game IS BonusGame);
// В данном примере порядок выполнения операторов будет такой: IS, IF, (+)