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

Оператор 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);
}