Изменение свойства (CHANGE)
Оператор изменения свойства создает действие, которое записывает значение одного выражения (источник) в свойство (приёмник) для всех наборов аргументов, для которых значение третьего выражения (условие) не равно NULL. Условие можно не задавать; в этом случае оно считается выполняющимся всегда.
Источник и условие используют те же аргументы, что и записываемое свойство. Если источник возвращает NULL для набора аргументов, удовлетворяющего условию, в свойство записывается NULL, что стирает ранее сохранённое значение.
Изменяемые свойства
Записываемое свойство должно быть изменяемым. Изменяемыми являются:
- первичные свойства, в том числе локальные первичные свойства;
- свойства, созданные оператором выбора, — платформа определяет, какое условие выполняется для заданных аргументов, и записывает значение в соответствующее свойство-результат;
- композиция изменяемых свойств — запись передаётся через композицию в нижележащее изменяемое свойство по разрешённым аргументам.
Помимо вышеперечисленных, изменяемыми свойствами также являются свойства, созданные при помощи оператора экстремума и логических операторов (которые по сути являются разновидностями оператора выбора).
Язык
Для объявления действия, реализующего изменение свойства, используется оператор CHANGE.
Примеры
// установить всем клиентам у кого сумма заказа больше 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);
}