Локальная переменная — Википедия

Пример локальной переменной в среде MS Visual Studio 2012

В программировании локальной переменной называют переменную, объявленную внутри блока кода. Область видимости локальной переменной начинается в точке её объявления и заканчивается в конце этого блока[1][2]. Например, в языке Си локальными являются переменные объявленные внутри функции или блока (в Си, блоки ограничиваются фигурными скобками { и })[3].

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

Организация в памяти

[править | править код]

Локальные переменные хранятся в стеке вызовов в большинстве языков[4]. Это означает, что если функция рекурсивно вызывает сама себя, то переменные каждый раз создаются заново и им выделяется персональная память, а не запись в одно и то же место.

Ограничения

[править | править код]

Локальная переменная ограничивается только размером памяти выделенной операционной системой или компьютером под стек.

Алгол–подобные языки позволяют устраивать сколь угодно большую вложенность блоков и в каждом будут свои локальные переменные.

Область применения

[править | править код]

Локальные переменные делают возможной рекурсию[5].

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

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

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

Статические локальные переменные

[править | править код]

Статические переменные — это особый тип локальных переменных, доступен во многих популярных языках(включая c/c++, Visual Basic, VB.NET), суть его заключается в том, что эта переменная сохраняет в себе значение в каждом вызове функции. И в каждом вызове она будет ровно такой, какой была при закрытии тела этой функции до этого[6].

Perl имеет ключевое слово, local, для «локализации» переменных, но в этом случае, local означает не то, что большинство людей ожидает от него. [2] Оно создаёт временную переменную с ограниченным временем жизни, но находящуюся в глобальном пространстве имён. Это позволяет видеть данную переменную в любой функции, вызванной из данного блока. Для создания лексических переменных, которые больше похожи на автоматические переменные, используйте оператор my. Чтобы понять, как это работает рассмотрим следующий код:

$a = 1;  sub f() {     local $a;     $a = 2;     g(); } sub g() {     print "$a\n"; }  g(); f(); g(); 

Результат:

1 2 1 

это происходит с именем глобальной переменной $a, которое начинает указывать на новую временную переменную, созданную в функции f(), но глобальное значение восстанавливается при выходе из f(). Используя my в этом случае вместо local вывело бы 1 три раза, так как в этом случае переменная $a действительно являлась бы локальной для функции f() и не видели g(). По этой причине многие считают, что оператор local должен иметь другое название, например save. [5]

Локальные переменные в Ruby

[править | править код]

Руби как язык был вдохновлен также Perl, но в этом случае запись была сделана проще: имени глобальной переменной должен предшествовать знак $, например, $variable_name, в то время как локальная переменная просто не имеет знака $ перед её именем, например, variable_name (в то время как в Perl все скалярные значения имеют $ спереди).

Пример использования локальных переменных на языке С

[править | править код]
#include <stdio.h> int a = 0;  // глобальная переменная  int main() {     printf("%d", a); // будет выведено число 0     {        int a = 1; // объявлена локальная переменная а, глобальная переменная a не видна        printf("%d", a); // будет выведено число 1        {           int a = 2; // еще локальная переменная в блоке, глобальная переменная a не видна, не видна и предыдущая локальная переменная           printf("%d", a);  // будет выведено число 2        }     } } 

Выдаст:

012 

Примечания

[править | править код]
  1. Локальные переменные. Дата обращения: 26 февраля 2013. Архивировано 4 августа 2013 года.
  2. Пример 22-8. Область видимости локальных переменных. Дата обращения: 26 февраля 2013. Архивировано 16 февраля 2013 года.
  3. Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. 1.6.3 Статическая область видимости и блочная структура // Компиляторы: принципы, технологии и инструменты = Compilers: Principles, Techniques, and Tools. — 2-е изд. — Вильямс, 2008. — С. 62. — 1184 с. — ISBN 978-5-8459-1349-4.
  4. Локальные переменные. — «По умолчанию локальные переменные хранятся в стеке.» Дата обращения: 26 февраля 2013. Архивировано 4 августа 2013 года.
  5. 22.2.1. Локальные переменные делают возможной рекурсию. Дата обращения: 26 февраля 2013. Архивировано 16 февраля 2013 года.
  6. Статические переменные. Дата обращения: 26 февраля 2013. Архивировано из оригинала 30 января 2013 года.