Параметры и результат функций
Список параметров функции содержит описания параметров в рамках стандартного механизма. Параметры могут быть описаны по отдельности или объединены в группы. Список переменных указанный в заголовке функции называется формальными параметрами. Список переменных, указанных в операторе вызова функции - это фактические параметры. Для одного параметра или группы параметров задается тип и способ их передачи. Передача параметров выполняется по следующей схеме: сначала вычисляются выражения стоящие на месте фактических параметров, далее формальным параметрам функции присваиваются значения фактических, выполняется проверка типов и при необходимости выполняется их преобразование.
Стандартный механизм поддерживает два способа передачи параметров: параметр-значение (передача копированием) и параметр-переменная (передача ссылки). Если перед типом параметра или группы ничего не указано, то считается, что параметр или все параметры группы являются параметрами-значениями. В случае указания перед типом параметра или группы ключевого слова ПЕРЕМ считается, что параметр или все параметры группы являются параметрами-переменными. После типа параметра или группы следует двоеточие. За двоеточием следует имя параметра или перечисление имен (для группы) через запятую. Одиночные параметры или группы параметров разделяются между собой точками с запятой.
Синтаксис:
1) Параметр или группа параметров:
[ПЕРЕМ] <тип параметра или *>: <имя параметра1> [, >имя параметра2>, ... ]
2) Список параметров:
( <параметр или группа1> [; <параметр или группа2>; ...] )
Вместо типа параметра или группы параметров может быть записан символ *, что означает отключение проверки типов на этапе компиляции для этого параметра или группы.
Примеры:
// функция без результата и параметров ФУНКЦИЯ ф1 //... КОНЕЦ_ФУНКЦИИ // функция с результатом и параметрами // - функция принимает три параметра // - первые два имеют числовой тип и записаны ввиде группы // - третий параметр имеет строковый тип // - все параметры являются параметрами-значениями // - функция возвращает значение логического типа ФУНКЦИЯ ЛОГИКА: ф2(ЧИСЛО: x, y; СТРОКА: текст) //... КОНЕЦ_ФУНКЦИИ // функция с параметром-переменной ФУНКЦИЯ ф3(ПЕРЕМ СТРОКА: стр) //... КОНЕЦ_ФУНКЦИИ // функция без проверки типов результата и параметра-значения ФУНКЦИЯ *: ф4(*: парам) //... КОНЕЦ_ФУНКЦИИ
При вызове функций в качестве параметров-значений могут быть заданы произвольные выражения, тип которых соответствует типу параметра. Перед вызовом функции выражение параметра вычисляется, а полученное значение передается функции. В качестве параметра-переменной можно указать любую единицу языка, являющуюся переменной: общие и локальные переменные, поля объектов, элементы индексных переменных и индексных полей объектов. В общем случае обращение к такой переменной может содержать несколько имен, разделенных точками, квадратные скобки с выражениями индексов и т.п. Важно, что при этом способе передачи не происходит копирования значения. Этот факт можно использовать для ускорения передачи больших объектных значений. Основным назначением параметров-переменных все же является изменение значений указанных переменных функцией. Т.к. функция в качестве результата возвращает только одно значение, а часто необходимо получить несколько, то параметры-переменные позволяют не только передать в функцию, но и получить из функции необходимые данные.