Оператор IF ... THEN
Оператор IF ... THEN создает действие, реализующее ветвление с одним условием (одиночная форма).
Синтаксис
IF condition
THEN action
[ELSE alternativeAction]
Описание
Оператор IF ... THEN создает действие, реализующее ветвление с одним условием. При выполнении этого действия проверяется условие: если оно выполняется, вызывается действие, указанное после ключевого слова THEN. Если оно не выполняется, вызывается действие, указанное после ключевого слова ELSE (если этот блок задан).
Ветка ELSE присоединяется к ближайшему предшествующему оператору, который допускает ее и еще ее не имеет. Если действие после THEN записано без фигурных скобок и само является оператором, синтаксис которого заканчивается необязательной веткой ELSE — ASK, INPUT, DIALOG и IMPORT при записи с DO, FOR, REQUEST, CASE или другой IF ... THEN, — следующий за ним ELSE становится веткой этого оператора, а не данного. Ошибка или предупреждение при этом не выдаются, а при невыполнении условия не выполняется ничего. Чтобы ELSE относился к оператору IF ... THEN, действие после THEN нужно заключить в фигурные скобки.
Параметры
-
conditionВыражение, задающее условие. Если значение выражения не равняется
NULL, то условие выполняется и вызывается действие указанное после ключевого словаTHEN. -
actionКонтекстно-зависимый оператор, описывающий действие, которое будет вызвано при выполнении условия.
-
alternativeActionКонтекстно-зависимый оператор, описывающий действие, которое будет вызвано, если условие не выполняется.
Примеры
// Действие, сравнивающее значение свойства count с числом 3 и выдающее пользователю сообщение
moreThan3(obj) {
IF count(obj) > 3 THEN
MESSAGE '>3';
ELSE
MESSAGE '<=3';
}
checkNullName (Store st) {
IF NOT name(st) THEN
MESSAGE 'Name is null';
}
// ELSE относится к ASK (ветка отмены), а не к IF: при confirm() = NULL не выполняется ничего
sendOrAsk (Order o) {
IF confirm() THEN
ASK 'Отправить заказ?' DO send(o);
ELSE
send(o);
}
// фигурные скобки привязывают ELSE к IF
sendOrAskFixed (Order o) {
IF confirm() THEN {
ASK 'Отправить заказ?' DO send(o);
} ELSE
send(o);
}