<<
>>

Организация области видимости для выполнения переданной подпрограммы

Вторая проблема проявляется в языках, где разрешены вложенные подпрограммы. Вопрос заключается в организации области видимости для выполнения переданной подпрограммы. Существуют три возможности:

? Область видимости ограничивается областью видимости для того оператора вызова, который активирует переданную подпрограмму (теневое связывание).

? Область видимости образует программный фрагмент, в котором объявлена переданная подпрограмма (глубокое связывание).

? Область видимости ограничивается областью видимости того оператора вызова, который передал подпрограмму как фактический параметр (специальное связывание).

Следующий фрагмент, представленный в синтаксисе языка JavaScript, иллюстрирует все эти возможности.

Здесь в объявление функции funcl вложены объявления функций func2, func3 и func4. В заголовке функции func4 обозначен формальный параметр-функция sub. При вызове из функции func3 происходит передача имени функции func2 в качестве параметра: фактический параметр func2 заменяет формальный параметр sub.

Работа фрагмента начинается с выполнения операторов тела функции funcl:

Типы возвращаемых значений

355

rez = 1; func3();

Далее вызывается функция func3, которая, в свою очередь, вызывает функцию func4. Рассмотрим выполнение функции func2 при ее вызове из func4. При теневом связывании область видимости такого выполнения совпадает с областью видимости функции func4, так что вхождение переменной rez в функции func2 связывается с локальной переменной rez в функции func4, и программа выводит строку rez = 4. При глубоком связывании область видимости выполнения функции func2 совпадает с областью видимости функции func1, поэтому вхождение переменной rez в функции func2 связывается с локальной переменной rez в функции func1, и программа выводит строку rez = 1.

При специальном связывании вхождение переменной rez в функции func2 связывается с локальной переменной rez в функции func3, и программа выводит строку rez = 3.

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

Теневое связывание неприемлемо для тех языков со статической областью видимости, где разрешены вложенные подпрограммы. Допустим, что процедура Отправитель передает процедуру Посылка как параметр в процедуру Получатель. Проблема заключается в том, что процедура Получатель может не принадлежать к статической области видимости процедуры Посылка, делая таким образом очень неестественным для процедуры Посылка доступ к переменным процедуры Получатель. С другой стороны, для любой процедуры в языках со статической областью видимости, включая процедуры, передаваемые как параметры, вполне нормальна ситуация, когда область видимости определяется местонахождением ее объявления. Следовательно, для языков со статической областью видимости более логичным является использование глубокого связывания. Некоторые языки с динамической областью видимости используют теневое связывание.

<< | >>

Еще по теме Организация области видимости для выполнения переданной подпрограммы:

  1. Статья 664. Момент выполнения обязанности продавца передать товар
  2. Статья 663. Срок выполнения обязанности передать товар
  3. 1. Создание видимости одного преступления для сокрытия другого
  4. Очерк 1: Гленда «Для себя и для организации я хочу, чтобы все делалось правильно и приводило к нужным результатам»
  5. § 3. Договор подряда на выполнение проектных и изыскательских работ для строительства
  6. 2. Правовое регулирование отношений по выполнению подрядных работ для государственных нужд
  7. Статья 43. Выполнение специального задания по предупреждению либо раскрытию преступной деятельности организованной группы или преступной организации
  8. § 4. Государственный контракт на выполнение подрядных работ для государственных нужд
  9. 1.5. Государственный контракт на выполнение подрядных работ для государственных нужд
  10. Применение стратегии Аристотеля для исследования и организации проблемного пространства
  11. Видимость; а не суть
  12. МЕТОД ВИДИМОЙ ПОДДЕРЖКИ.