последних более четко определено взаимодействие вызывающей и вызываемой подпрограмм в части передачи данных и использования ОЗУ).
Итак, рассмотрим операторы подпрограммы-функции
FUNCTION name [ (pararneterlist) ] [STATIC] (3.17)
[statementblock] name = expression
[s tatementblock] END FUNCTION
и подпрограммы-процедуры SUB name [ (parameterlist) ] [STATIC] (3.18),
[statementblock] END SUB
которые оформляются в виде модулей, размещенных вне текста основной программы. В отличие от подпрограммы-функции в состав имени подпрограммы-процедуры не включается суффикс и она вызывается процедурным оператором.
Информация о каждом модуле должна быть выдана интерпретатору в основном тексте программы посредством команды, называемой декларацией
DECLARE {FUNCTION I SOB} name [ ([parameter-list]) ] (3.19)
Она вводится автоматически при вводе текста подпрограммы в специально отведенное средой окно.Такое оформление подпрограмм связано с несколькими отличиями от DEF FN (разумеется, в лучшую сторону).
В части обмена данными первое и самое простое отличие — в списке параметров допускается использовать тип данных с обозначением
AMY (3.20),
при использовании которого соответствие типов формального и фактического параметров при вызове подпрограммы не проверяется. Более тонкие отличия связаны со способами обмена данными в части защиты данных вызывающей программы от их изменений вызываемой подпрограммой.
Передача значений аргументов, обозначенных в списке параметров, может осуществляться двумя существенно отличающимися друг от друга способами. Первый способ — передача подпрограммам копий аргументов, что гарантирует сохранность этих аргументов в основной программе. Это так называемая передача аргументов по значению. Второй способ — это передача подпрограммам адресов аргументов, что является для процедуры единственной возможностью выдать результаты вычислений вызывающей программе. Такой способ называется передачей аргументов по указателю.
Если подпрограмма не должна изменять значение параметра, то в списке формальных параметров он должен быть заключен в скобки ( ). Если подпрограмма-процедура должна изменить значение параметра, то нельзя использовать скобки для его записи в список формальных параметров.