Локальная переменная

редактировать

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

Локальные переменные могут иметь лексическую или динамическую область видимости, хотя лексическая (статическая) область видимости гораздо более распространена. В лексической области видимости (или лексической области видимости; также называемой статической областью видимости или статической областью видимости), если область видимости имени переменной является определенным блоком, то ее областью видимости является текст программы определения блока: в тексте этого блока имя переменной существует, и привязан к значению переменной, но вне текста этого блока имя переменной не существует. Напротив, в динамической области видимости (или динамической области видимости), если область видимости имени переменной является определенным блоком, тогда ее областью видимости является этот блок и все функции, транзитивно вызываемые этим блоком (за исключением случаев, когда они снова переопределяются другим объявлением); после завершения блока имя переменной не существует. Некоторые языки, такие как Perl и Common Lisp, позволяют программисту выбирать статическую или динамическую область видимости при определении или переопределении переменной. Примеры языков, использующих динамическую область видимости, включают Logo, Emacs lisp и языки оболочки bash, dash и оболочку MirBSD Korn. (mksh ) "локальное" объявление. Большинство других языков предоставляют локальные переменные с лексической областью видимости.

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

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

Содержание

  • 1 Статические локальные переменные
  • 2 Локальные переменные в Perl
  • 3 Локальные переменные в Ruby
  • 4 См. Также
  • 5 Ссылки

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

Специальный тип локальной переменной, называемый статической локальной, доступен во многих основных языках (включая C /C ++, Visual Basic и VB.NET ), что позволяет значение, которое должно сохраняться от одного вызова функции к другому - это статическая переменная с локальной областью видимости. В этом случае рекурсивные вызовы функции также имеют доступ к переменной (single, , статически выделенной ). Во всех перечисленных выше языках статические переменные объявляются как таковые с помощью специального ключевого слова класса хранения (например, static).

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

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

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

Perl поддерживает как динамические, так и локальные переменные с лексической областью видимости. Ключевое слово localиспользуется для определения локальных переменных с динамической областью видимости, а myиспользуется для локальных переменных с лексической областью видимости. Поскольку динамическая область видимости сегодня менее распространена, документация Perl предупреждает, что «local- это не то, что большинство людей считают« локальным ».». Вместо этого ключевое слово localдает временное значение с динамической областью действия для глобальной (пакетной) переменной, которая сохраняется до конца включающего блока. Однако переменная видна любой функции, вызываемой из блока. Чтобы создать локальные переменные с лексической областью видимости, используйте вместо этого оператор my.

Чтобы понять, как это работает, рассмотрите следующий код:

$ a = 1; sub f () {локальный $ a; $ a = 2; грамм(); } sub g () {print "$ a \ n"; } грамм(); f (); грамм();

это выведет:

1 2 1

Это происходит, поскольку глобальная переменная $ a изменена на новое временное (локальное) значение внутри f (), но глобальное значение восстанавливается после выхода из области действия f ().

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

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

Ruby, поскольку язык был вдохновлен Perl, но в данном случае нотация была упрощена: имени глобальной переменной должен предшествовать знак $, например $ variable_name, в то время как у локальной переменной просто нет знака $ перед именем, например имя_переменной(в то время как в Perl все скалярные значения имеют впереди $). Обратите внимание, что Ruby обеспечивает только встроенную поддержку локальных переменных со статической областью видимости, таких как Perl my, а не локальных переменных с динамической областью видимости, таких как Perl local. Для Ruby существует как минимум одна библиотека, которая предоставляет переменные с динамической областью видимости.

См. Также

Ссылки

  1. ^«Текущий стандарт C» (PDF). (3,61 МБ) (по состоянию на 2009 г.). В частности, см. Раздел 6.2.4 «Продолжительность хранения объектов», стр. 32.
  2. ^perldoc.perl.org: local
  3. ^perldoc.perl.org: perlsub: временные значения через local ()
  4. ^perldoc.perl.org: perlsub: частные переменные через my ()
  5. ^Рэндал Л. Шварц и Том Феникс (2001-07-01). Изучение Perl 3-е издание. О'РЕЙЛИ. пункт 4.7. ISBN 0-596-00132-0.
  6. ^Конрад Ирвин. «LSpace: динамическая область видимости для Ruby». Декабрь 2012 г. http://cirw.in/blog/lspace Проверено 16 октября 2013 г.
Последняя правка сделана 2021-05-28 05:07:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте