Введение
В компьютерном программировании переменная, область использования которой ограничена частью программы (областью видимости). В информатике локальная переменная – это переменная, имеющая локальную область видимости. Обращение к локальной переменной внутри функции или блока, в котором она объявлена, имеет приоритет над обращением к переменной с тем же именем в более широкой области видимости. В языках программирования с двумя уровнями видимости локальные переменные противопоставляются глобальным переменным. Однако многие языки, произошедшие от ALGOL, допускают любое количество уровней вложенной видимости, с приватными переменными, функциями, константами и типами, скрытыми внутри них посредством вложенных блоков или вложенных функций. Локальные переменные являются основополагающими для процедурного программирования и, в более широком смысле, модульного программирования: переменные локальной области видимости используются для предотвращения проблем, связанных с побочными эффектами, которые могут возникать при использовании глобальных переменных.
In computer science, a local variable is a variable that is given local scope. A local variable reference in the function or block in which it is declared overrides the same variable name in the larger scope. In programming languages with only two levels of visibility, local variables are contrasted with global variables. On the other hand, many ALGOL derived languages allow any number of nested levels of visibility, with private variables, functions, constants and types hidden within them, either by nested blocks or nested functions. Local variables are fundamental to procedural programming, and more generally modular programming: variables of local scope are used to avoid issues with side effects that can occur with global variables.
Область применения
Локальные переменные могут иметь лексическую или динамическую область видимости, хотя лексическая (статическая) область видимости встречается гораздо чаще. В лексической области видимости (или лексическом объеме; также называемой статической областью видимости или статическим объемом), если область видимости имени переменной – это определенный блок, то ее область видимости – это текст программы, определяющий этот блок: внутри этого блока имя переменной существует и связано со значением переменной, но за пределами этого блока имя переменной не существует. В отличие от этого, в динамической области видимости (или динамическом объеме), если область видимости имени переменной – это определенный блок, то ее область видимости – это этот блок и все функции, вызываемые транзитивно этим блоком (за исключением случаев, когда они переопределяются другим объявлением); после завершения блока имя переменной перестает существовать. Некоторые языки, такие как Perl и Common Lisp, позволяют программисту выбирать статическую или динамическую область видимости при определении или переопределении переменной. Примеры языков, использующих динамическую область видимости, включают Logo, Emacs Lisp, а также языки оболочек bash, dash и "local" объявление оболочки MirBSD Korn (mksh). Большинство других языков предоставляют локальные переменные с лексической областью видимости. В большинстве языков локальные переменные являются автоматическими переменными, хранящимися непосредственно в стеке вызовов. Это означает, что когда рекурсивная функция вызывает себя, локальным переменным в каждом экземпляре функции присваиваются различные адреса. Следовательно, переменные с такой областью видимости могут быть объявлены, записаны и прочитаны без риска возникновения побочных эффектов для функций за пределами блока, в котором они объявлены. Языки программирования, использующие семантику вызова по значению, предоставляют вызываемой подпрограмме собственную локальную копию переданных ей аргументов. В большинстве языков эти локальные параметры обрабатываются так же, как и другие локальные переменные внутри подпрограммы. В отличие от этого, семантика вызова по ссылке и вызова по имени позволяет параметрам выступать в качестве псевдонимов значений, переданных в качестве аргументов, позволяя подпрограмме изменять переменные за пределами своей области видимости.
Статические локальные переменные
Специальный тип локальной переменной, называемый статической локальной, доступен во многих распространенных языках программирования (включая C/C++, Visual Basic, VB.NET и PHP), который позволяет сохранять значение между вызовами функции – это статическая переменная с локальной областью видимости. В этом случае рекурсивные вызовы функции также имеют доступ к (единственной, статически выделенной) переменной. Во всех вышеперечисленных языках статические переменные объявляются с использованием специального ключевого слова класса хранения (например, `static`). Статические локальные переменные в глобальных функциях имеют такой же срок жизни, как и статические глобальные переменные, поскольку их значение сохраняется в памяти на протяжении всего времени работы программы, но имеют область видимости функции (а не глобальную), как и автоматические локальные переменные. Это отличается от других способов использования ключевого слова `static`, которое имеет различные значения в разных языках.
Локальные переменные в Ruby
Ruby как язык также был вдохновлен Perl, но в этом случае синтаксис был упрощен: имя глобальной переменной должно начинаться со знака $, например, $имя_переменной, а у локальной переменной этого знака нет, например, имя_переменной (в то время как в Perl все скалярные значения имеют знак $ в начале). Важно отметить, что Ruby предоставляет встроенную поддержку только для локальных переменных со статической областью видимости, как в Perl с использованием `my`, а не для локальных переменных с динамической областью видимости, как в Perl с использованием `local`. Существует как минимум одна библиотека для Ruby, которая обеспечивает поддержку динамически изменяемых переменных.