Оператор CHANGE
Оператор CHANGE создает действие, которое изменяет свойство.
Синтаксис
[CHANGE] propertyId(expr1, ..., exprN) <- valueExpr [WHERE whereExpr]
Описание
Оператор CHANGE создает действие, которое записывает значение valueExpr в свойство при аргументах expr1, ..., exprN для каждого набора аргументов, для которого whereExpr не равно NULL. Список аргументов может вводить новые локальные параметры; такие параметры соответствуют перебираемым объектам и не являются параметрами создаваемого действия.
Параметры
-
propertyIdИдентификатор свойства, значение которого изменяется. Свойство должно быть изменяемым.
-
expr1, ..., exprNСписок выражений или типизированных параметров, задающих аргументы изменяемого свойства. При использовании типизированных параметров можно обращаться как к уже объявленным параметрам, так и объявлять новые локальные параметры; при использовании выражений добавлять новые локальные параметры нельзя. Новый параметр объявляется в этом списке отдельным аргументом (
discount(Customer c) <- 15), а внутри выражения-аргумента используются только уже объявленные параметры — параметры действия или объемлющего оператора либо типизированные параметры, объявленные левее в этом же списке (discount(customer(o)) <- 15): запись по вычисляемому ключу видаbyId(LONG(Item i)) <- ...отклоняется при загрузке модуля, и такой параметр вводят снаружи — например, операторомFOR(см. последний пример). Количество элементов в этом списке должно совпадать с количеством параметров изменяемого свойства. -
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;
}
CLASS Item;
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);
}
// аргумент-выражение от параметра действия: скидка клиенту заказа
CLASS Order;
customer = DATA Customer (Order);
setOrderDiscount (Order o) {
discount(customer(o)) <- 15;
}
// ключ — выражение от нового параметра: в списке аргументов его объявить нельзя, поэтому параметр i вводится оператором FOR
inById = DATA LOCAL BOOLEAN (LONG);
fillInById {
FOR in(Item i) DO inById(LONG(i)) <- TRUE;
}