Шаг 41.
Область видимости имен объектов (переменных)

    Этот шаг посвящен объяснению правил, регламентирующих видимость объектов, в частности, переменных в подпрограммах.

    Вы, наверное, обратили внимание на то, что в приведенных в предыдущих шагах подпрограммах нигде не использовались переменные с именами, которые бы совпадали с именами переменных, размещенных в основной программе. Однако на практике очень часто можно встретить совпадение имен переменных, описанных в основной программе и подпрограмме. Как же в этом случае поступает компилятор? Как он различает эти переменные? Значения каких переменных он использует? Разъяснению этих вопросов как раз посвящен этот шаг.

    Еще раз подчеркнем, что подпрограмма - это самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное место в памяти компьютера. Этим объясняется тот факт, что переменные с одинаковыми именами, используемые в подпрограмме и в основной программе, являются разными (в программе, иллюстрирующей передачу параметров по ссылке, - переменные Sk и Sp основной программы и параметры Sk и Sp процедур). При выполнении программы машина "не путает" имена этих переменных, так как области их действия не совпадают.

    Существуют следующие правила, регламентирующие видимость имен переменных.

   

    1. Имена переменных, описанных в некоторой подпрограмме, считаются известными в пределах данной подпрограммы, включая и все вложенные подпрограммы.

    Приведем пример программы, иллюстрирующий это правило (рис.1):


Рис.1. Видимость переменной из основной программы в подпрограмме

Текст этой программы можно взять здесь.


    Замечание.
Такая "передача" параметров из основной программы в подпрограмму считается плохим стилем программирования. Дело в том, что повторно использовать такую подпрограмму затруднительно из-за того, что нужно помнить, какое количество параметров неявно было передано в подпрограмму и что они означают. Лучше всего осуществлять явную передачу параметров в подпрограмму, используя механизм формальных и фактических параметров.

    2. Имена переменных, описанных в подпрограмме, должны быть разными в пределах данной подпрограммы и могут совпадать с именами переменных из других подпрограмм.

    На рисунке 2 приведена программа, иллюстрирующая это правило:


Рис.2. Использование одинаковых имен переменных в разных подпрограммах

Текст этой программы можно взять здесь.

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

    3. Пусть вторая подпрограмма вызывается из первой. Во второй подпрограмме описана переменная с именем, которое существует в первой подпрограмме. Тогда переменная из второй подпрограммы делает "невидимой" (недоступной) переменную из первой подпрограммы.

    Проиллюстрируем это правило программой на рисунке 3:


Рис.3. "Экранирование" переменных

Текст этой программы можно взять здесь.

    Из анализа приведенной программы можно сделать вывод, что переменная x, расположенная в подпрограмме, делает недоступной аналогичную переменную, расположенную в основной программе. Чтобы быть уверенным, что в подпрограмме будет доступна переменная, описанная в основной программе, ее значение нужно передавать явным образом, используя механизм формальных и фактических параметров.

    На следующем шаге мы рассмотрим еще несколько интересных моментов, связанных с подпрограммами.


Предыдущий шаг Содержание Следующий шаг