Переменные и прочие объекты, используемые в программе, описания которых содержатся в подпрограмме, являются локальными и действуют только внутри этой подпрограммы. Никакой связи между ними и объектами вызывающей программной единицы, имеющими (возможно, случайно) такие же имена (идентификаторы), нет. Они полностью независимы. С другой стороны, в подпрограмме можно использовать идентификаторы, описанные только в вызывающей программной единице, но не в самой подпрограмме. Смысл и значение этих Идентификаторов будут одинаковы и там, и там. Такие идентификаторы называются глобальными, или нелокальными. Область действия описания конкретного идентификатора называется его областью видимости. Другими словами, область видимости переменной – это множество операторов, в которых данную переменную можно использовать. Использования глобальных переменных в подпрограммах следует избегать. Тому есть несколько причин. Одна заключается в том, что подпрограмма, использующая глобальные переменные, становится менее универсальной, чем замкнутая, «самодостаточная» подпрограмма. При ее переносе в другую программу придется тщательно проследить за обменом данными между программными единицами с помощью глобальных переменных. Вторая причина связана с тем, что при использовании глобальных переменных возрастает риск ошибок, подчас трудно обнаружимых, вызванных «несанкционированным» или неучтенным изменением значения глобальной переменной в теле подпрограммы. Такие процедуры (или функции) могут иметь неожиданные побочные эффекты. Если в подпрограмме описаны другие процедуры или функции, то область видимости описанных в ней переменных распространяется на вложенные подпрограммы, если только в них не описаны переменные с такими же именами. |