Подпрограммы, по сравнению с макросами, обладают рядом преимуществ:
- подпрограммы, определённые в одной программе, можно запустить из другой программы;
- в каждой подпрограмме можно объявить свой набор переменных, доступный только внутри этой подпрограммы, но, тем не менее, мы не теряем доступ к глобальным переменным;
- в отличие от макросов, подпрограммы доступны для отладчика, соответственно, в теле подпрограмм можно строить сложную логику выполнения.
Работа с подпрограммами не лишена и своих нюансов. Основной из них – после подпрограмм не должно быть никакого программного кода. Поэтому подпрограммы объявляются в конце основного кода программы.
Кстати, в подпрограмме можно объявить макрос, который будет доступен только в теле этой подпрограммы.
Объявление и вызов подпрограммы
Общий вид подпрограммы выглядит следующим образом:
FORM form_name [TABLES tab STRUCTURE struc] [USING var1] [CHANGING var2]. * Тело подпрограммы ENDFORM.
Строки, указанные в квадратных скобках, не обязательны при объявлении подпрограмм. Сами квадратные скобки не пишутся.
Назначение дополнений:
- TABLES используется для передачи таблиц и структур в подпрограмму;
- USING/CHANGING используется для передачи переменных в подпрограмму. Как таковой, разницы между этими двумя операторами нет, просто с помощью них определяется, какие переменные будут изменены на выходе из подпрограммы. На данный момент использование оператора CHANGING считается устаревшим, но я рекомендую его использовать, чтобы потом не путаться в коде.
Вызов подпрограмм осуществляется при помощи оператора PERFORM:
PERFORM form_name [TABLES tab] [USING var1] [CHANGING var2].
Операторы TABLES, USING и CHANGING ставятся в порядке, соответствующем объявлению подпрограммы.
Для вызова подпрограммы, объявленной в другой программе, используется следующая конструкция:
PERFORM form_name(program_name).
Подводя итог всему выше сказанному, приходим к следующим выводам:
- макросы применяются для упрощения выполнения небольших рутинных операций с простой логикой. Связано это с невозможностью отладки макросов;
- подпрограммы используются для выполнения алгоритмов любой сложности (в пределах разумного, естественно; не стоит включать в подпрограмму весь код программы) и доступны для вызова из других программ.