Статус документа
Статус документа

ГОСТ Р ИСО 10303-11-2009 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

     12.8 Вызов функции


Вызов функции активизирует данную функцию. Вызов функции состоит из идентификатора функции, за которым может следовать список фактических параметров. Число, тип и порядок следования фактических параметров должны соответствовать формальным параметрам, определенным для данной функции. Вызов функции возвращает значение функции при подстановке в объявлении функции фактических параметров вместо формальных параметров.

Примечание - Фактические параметры функции могут иметь неопределенное (?) значение. Функция должна корректно обрабатывать такие значения и может сама возвращать неопределенное значение.


Активизация функции расширяет пространство экземпляров. Любые экземпляры, созданные в процессе выполнения функции, должны быть однозначно идентифицируемыми во всей совокупности известных экземпляров. Как правило, созданный таким образом экземпляр недоступен вне создающей его функции и, в частности, не является частью рассматриваемой совокупности экземпляров. Исключением является случай, когда такой экземпляр возвращается в качестве результата или в составе результата вызова функции. В данном случае экземпляр остается доступным в точке вызова функции. Если экземпляр возвращается подобным образом на уровень схемы (то есть как значение вычисляемого атрибута или константы), он рассматривается как часть общей совокупности экземпляров.

   Синтаксис:

     219 function_call = ( built_in_function | function_ref )
                                    [ actual_parameter_list ] .
     167 actual_parameter_list = ' ( ' parameter { ' , ' parameter } ' ) ' .
     264 parameter = expression .


Ограничение: передаваемые фактические параметры должны быть совместимы по назначению с формальными параметрами.

Пример - Пример использования вызова функции:

ENTITY point;

х, у, z : number;

END_ENTITY;
FUNCTION midpoint_of_line(l:line):point;
...
END_FUNCTION;
IF midpoint_of_line(L506).x = 9.0 THEN ...

-- применяя оператор ссылки на атрибут
-- непосредственно к результату функции

END_IF;