Cтраница 4
Доступ к внутренней процедуре возможен только из содержащей ее внешней процедуры. Сами внутренние процедуры имеют доступ ко всем объектам своей внешней процедуры, включая возможность вызова других ее внутренних процедур. [46]
В нашей системе был также создан графический пакет для АПЛ. Внутренние процедуры пакета являются практически теми же, что и в пакете для Фортрана, но имеют синтаксическую формы функций АПЛ. Функции APL-G, вызываемые из программы пользователя, абсолютно идентичны командам GRIP, перечисленным в разд. Список параметров команд GRIP описывается в АПЛ-программе как строка литер, поэтому в соответствии с синтаксисом АПЛ он заключается в кавычки. Каждая функция APL-G, реализующая какую-либо команду GRIP, имеет часть, анализирующую входную строку литер. В строке отыскиваются разделители () и в соответствии с ними строка разбивается на подстроки, представляющие отдельные элементы списка параметров. Если элемент является именем, то соответствующая подстрока без каких-либо преобразований засылается в локальную переменную. Если параметр является выражением, то представляющая его подстрока вычисляется ( с помощью оператора EXECUTE) и полученное значение засылается в локальную переменную. Обмен информацией между функциями осуществляется через глобальные переменные. Таким образом, все функции, моделирующие инструкции языка GRIP, являются функциями одного параметра и не имеют явного результата. Поэтому пользователь должен не применять имена, начинающиеся с этих же литер. [47]
Внутренняя процедура или подпрограмма - - это замкнутая подпрограмма, физически расположенная в вызывающем ее модуле. Внутренних процедур следует избегать по нескольким причинам. Внутренние процедуры трудно изолировать для тестирования ( автономного тестирования), и они не могут быть вызваны из модулей, отличных от тех, которые их физически содержат. Это не соответствует идее повторного использования. Конечно, имеется альтернативный вариант: включить копии внутренней процедуры во все модули, которым она нужна. Наконец, если только при программировании не установлена строжайшая дисциплина, внутренние процедуры будут иметь плохие сцепления с вызывающими их модулями. Когда возникает потребность во внутренней процедуре, проектировщик должен рассмотреть возможность оформления ее в виде отдельного модуля. [48]