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

Оператор RETURN

Оператор RETURN создает действие, реализующее выход из вызова действия.

Синтаксис

RETURN [resultExpr]

Описание

Оператор RETURN создает действие, которое выходит из наиболее вложенного вызова действия. Если задано resultExpr, значение этого выражения становится результатом этого вызова. Иначе вызов просто завершается, не возвращая значения.

Класс результата окружающего действия определяется одним из двух способов:

  • Для абстрактных действий класс результата объявляется в операторе ABSTRACT; класс значения выражения resultExpr должен соответствовать объявленному классу.
  • Для остальных действий класс результата выводится из выражений resultExpr всех операторов RETURN в теле действия. Если таких операторов несколько, результирующий класс — общий предок классов значений их выражений.

Если платформа не может определить класс значения resultExpr, такой RETURN недопустим. Например, класс не выводится из нетипизированного значения NULL.

Если resultExpr объявляет новые локальные параметры, они становятся дополнительными параметрами результата. В этом случае действие возвращает набор объектов, зависящих от значений этих параметров.

Одиночный RETURN допустим в любом действии вне зависимости от того, объявлен ли у действия результат.

Параметры

  • resultExpr

    Опциональное выражение. Его значение возвращается вызывающему коду как результат окружающего действия. Для абстрактных действий класс значения этого выражения должен соответствовать объявленному классу результата. Для остальных действий платформа должна уметь вывести этот класс.

Примеры

// одиночный RETURN — выходит из окружающего действия, не возвращая значения
importFile {
LOCAL file = FILE ();
INPUT f = FILE DO {
file () <- f;
}

IF NOT file() THEN RETURN;
}

// RETURN с выражением — класс результата выводится из выражений
priceBucket (INTEGER price) {
IF price > 1000 THEN RETURN 'high';
IF price > 100 THEN RETURN 'mid';
RETURN 'low';
}

// дополнительный параметр в выражении — действие возвращает набор значений по этому параметру
allCaptions () {
LOCAL caption = STRING[100] (STRING);
caption('A') <- 'Alpha';
caption('B') <- 'Beta';
RETURN caption(STRING s);
}

// RETURN с выражением в абстрактном действии с объявленным классом результата
getLocalizedTitle(Issue issue) ABSTRACT STRING[100] (Language);
getLocalizedTitle (Issue issue) + {
RETURN localizedTitle(issue, Language l);
}