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

Инструкция BEFORE

Инструкция BEFORE - вызов действия перед вызовом другого действия.

Синтаксис​

BEFORE action(param1, ..., paramN) DO aspectAction;

Описание​

Инструкция BEFORE задает действие (будем называть его аспектом), которое будет вызываться перед вызовом указанного действия.

Аспект получает те же значения параметров, что и основное действие, и выполняется перед его телом при каждом вызове этого действия. Если аспект завершается оператором RETURN, тело основного действия не выполняется, как и его остальные аспекты, включая аспекты инструкции AFTER, - так аспект отменяет вызов, например после проверки условия; для вызвавшего действия вызов при этом завершается обычным образом, и оно продолжает работу со следующего действия. Несколько аспектов одного действия выполняются в порядке объявления.

Параметры​

Примеры​

changeName(Sku s, STRING[100] name)  { name(s) <- name; }

// Сообщение будет показано перед каждым вызовом changeName
BEFORE changeName(Sku s, STRING[100] name) DO MESSAGE 'Changing user name';

quantity = DATA NUMERIC[16,3] (Sku);
deleteSku(Sku s) { DELETE s; }

// Проверка перед удалением: при положительном остатке удаление не выполняется, а вызвавшее действие продолжает работу
BEFORE deleteSku(Sku s) DO {
IF quantity(s) > 0 THEN {
MESSAGE 'Sku has a stock balance';
RETURN;
}
}