Введение

Глобальная переменная – это переменная, доступная во всей компьютерной программе.

В программировании глобальная переменная – это переменная с глобальной областью видимости, что означает, что она видна (и, следовательно, доступна) во всей программе, если её область видимости не перекрыта другой переменной. Множество всех глобальных переменных известно как глобальная среда или глобальное состояние. В компилируемых языках глобальные переменные обычно являются статическими переменными, время жизни которых соответствует всему времени выполнения программы, в то время как в интерпретируемых языках (включая интерпретаторы командной строки) глобальные переменные обычно динамически выделяются при объявлении, поскольку они неизвестны заранее. В некоторых языках все переменные являются глобальными или глобальными по умолчанию, в то время как в большинстве современных языков переменные имеют ограниченную область видимости, как правило, лексическую, хотя глобальные переменные часто можно использовать, объявив переменную на верхнем уровне программы. Однако в других языках глобальных переменных не существует; это обычно модульные языки программирования, которые обеспечивают модульную структуру, или объектно-ориентированные языки программирования, основанные на классах, которые обеспечивают классовую структуру.

Использование

Механизмы взаимодействия с глобальными переменными называются механизмами глобальной среды (см. также глобальное состояние). Парадигма глобальной среды противопоставляется парадигме локальной среды, где все переменные являются локальными и не имеют общей памяти (и, следовательно, все взаимодействия могут быть сведены к передаче сообщений). Глобальные переменные широко используются для передачи информации между участками кода, не связанными отношением вызывающей и вызываемой функции, например, между конкурентными потоками и обработчиками сигналов. Языки (включая C), в которых каждый файл определяет неявное пространство имен, устраняют большинство проблем, возникающих в языках с глобальным пространством имен, хотя некоторые проблемы могут сохраняться без надлежащей инкапсуляции. Без надлежащей блокировки (например, с использованием мьютекса) код, использующий глобальные переменные, не будет потокобезопасным, за исключением значений, доступных только для чтения, в защищенной памяти.

Экологические переменные

Переменные среды – это функциональность, предоставляемая некоторыми операционными системами. В оболочке ОС (ksh в Unix, bash в Linux, COMMAND.COM в DOS и CMD.EXE в Windows) они представляют собой особый тип переменной: например, в Unix и подобных системах обычная переменная становится переменной среды при использовании ключевого слова `export`. Программный код, не являющийся оболочкой, должен обращаться к ним через вызовы API, такие как `getenv` и `setenv`. Они локальны для процесса, в котором были установлены. Это означает, что если открыть два окна терминала (два различных процесса, запускающих оболочку) и изменить значение переменной среды в одном окне, это изменение не будет видно в другом окне. Когда создается дочерний процесс, он наследует все переменные среды и их значения от родительского процесса. Обычно, когда программа вызывает другую программу, она сначала создает дочерний процесс посредством форка, затем дочерний процесс корректирует окружение по мере необходимости и, наконец, заменяет себя вызываемой программой. Таким образом, дочерние процессы не могут использовать переменные среды для обмена данными со своими аналогами, избегая проблемы "действия на расстоянии".

Только глобальные и глобальные по умолчанию

Ряд неструктурированных языков программирования, таких как (ранние версии) BASIC, COBOL и Fortran I (1956), предоставляют только глобальные переменные. Fortran II (1958) представил подпрограммы с локальными переменными и ключевое слово COMMON для доступа к глобальным переменным. Использование COMMON в FORTRAN продолжалось в FORTRAN 77 и оказало влияние на более поздние языки, такие как PL/SQL. Именованные группы COMMON для глобальных переменных в некоторой степени напоминают структурированные пространства имен. Переменные также глобальны по умолчанию в Forth, Lua, Perl и большинстве командных оболочек.

PHP (англ.)

PHP имеет глобальное ключевое слово и ряд необычных способов использования глобальных переменных. Переменные, объявленные вне функций, имеют файловую область видимости (которая для большинства целей является самой широкой). Однако они недоступны внутри функций, если не импортированы с помощью ключевого слова `global` (то есть, это ключевое слово обеспечивает доступ к глобальным переменным, а не объявляет их). Тем не менее, некоторые предопределенные переменные, известные как суперглобальные, всегда доступны. Все они являются массивами. Универсальным является суперглобальный массив `$GLOBALS`, который содержит все переменные, определенные вне области видимости функций. Изменения его элементов изменяют исходные переменные, а добавление новых элементов создает новые переменные. Суперглобальные массивы `$POST` и `$GET` широко используются в веб-программировании.

Другие языки

В Python и MATLAB глобальную переменную можно объявить в любом месте с помощью ключевого слова `global`. Глобальные переменные в Ruby обозначаются символом `$`. Существует ряд предопределенных глобальных переменных, например, `$$` – это идентификатор текущего процесса.