Оператор CHANGE
Оператор CHANGE
- создание действия, которое изменяет свойство.
Синтаксис
[CHANGE] propertyId(expr1, ..., exprN) <- valueExpr [WHERE whereExpr]
Описание
Оператор CHANGE
создает действие, которое изменяет свойство при выполнении условия. Этот оператор может добавлять свои локальные параметры при задании свойства, значение которого будет изменяться. Эти параметры соответствуют перебираемым объектам и не являются параметрами создаваемого действия.
Условие определяется блоком WHERE
. Если этот блок не задан, то считается, что условие всегда выполняется.
Ключевое слово CHANGE
, определяющее оператор, можно не указывать.
Параметры
-
propertyId
Идентификатор свойства, значение которого изменяется. Свойство должно быть создано определенными операторами, чтобы возможно было изменить его значение. Разрешается изменять значения свойств, созданных с помощью операторов
DATA
,ABSTRACT
,LOCAL
. -
expr1, ..., exprN
Список выражений или типизированных параметров, задающих аргументы изменяемог о свойства. При использовании типизированных параметров можно обращаться как к уже объявленным параметрам, так и объявлять новые локальные параметры. При использовании выражений добавлять новые локальные параметры нельзя. Количество выражений в этом списке должно совпадать с количеством параметров изменяемого свойства.
-
valueExpr
Выражение, на значение которого необходимо изменить значение свойства.
-
whereExpr
Выражение, значение которого является условием создаваемого изменения. Если не задано, считается равным
TRUE
.
Примеры
// установить всем клиентам у кого сумма заказа больше 100 скидку в размере 15 процентов
CLASS Customer;
discount = DATA NUMERIC[5,2] (Customer);
totalOrders = DATA NUMERIC[14,2] (Customer);
setDiscount {
discount(Customer c) <- 15 WHERE totalOrders(c) > 100;
}
discount = DATA NUMERIC[5,2] (Customer, Item);
in = DATA BOOLEAN (Item);
// изменить скидку для выбранных товаров для клиента
setDiscount (Customer c) {
discount(c, Item i) <- 15 WHERE in(i);
}
// скопировать свойство g в свойство f
f = DATA INTEGER (INTEGER);
g = DATA INTEGER (INTEGER);
copyFG {
f(a) <- g(a);
}