Локальна змінна
У програмуванні лока́льною змі́нною називають змінну, оголошену всередині блоку коду. Область видимості локальної змінної починається в точці її оголошення і закінчується в кінці цього блоку[1][2]. Наприклад, у мові С локальними є змінні оголошені всередині функції або блоку (в С блоки обмежуються фігурними дужками { ... }
)[3].
![](../I/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9.png.webp)
Існують мови програмування, в яких локальну змінну можна оголосити тільки у функції, оскільки в цих мовах локальна змінна, оголошена в блоці, оголошується у функції безпосереднього розташування цього блоку.
Організація в пам'яті
Локальні змінні в більшості мов зберігаються в стеку викликів[4]. Це означає, що якщо функція рекурсивно викликає сама себе, то змінні кожен раз створюються заново і їм виділяється персональна пам'ять, а не записуються в одне і те ж місце.
Обмеження
Локальна змінна обмежується тільки розміром пам'яті виділеної операційною системою або комп'ютером під стек.
Алголоподібні мови дозволяють необмежену вкладеність блоків і в кожному можуть бути свої локальні змінні.
Галузь застосування
Локальні змінні уможливлюють рекурсію[5].
Змінні локальної області видимості використовують, щоб уникнути проблем з побічними ефектами, які можуть статися з глобальними змінними.
Мови програмування, які використовують виклик за значенням, виділяють кожній підпрограмі локальну область видимості з локальних змінними і локальною копією аргументів, переданих їй.
Локальною змінною є будь-який параметр функції (наприклад, у мові Сі), що не використовує посилань або покажчиків.
Статичні локальні змінні
Статичні змінні — це особливий тип локальних змінних, доступний у багатьох популярних мовах (зокрема в C/C++, Visual Basic, VB.NET). Суть його в тому, що така змінна зберігає своє значення для наступних викликів функції. І в кожному виклику воно буде саме таким, яким було при виході з функції до цього[6].
local
у Perl
local
у PerlPerl має ключове слово, local
, для «локалізації» змінних, але в цьому випадку, local
означає не те, що більшість людей очікує від нього[7]. Воно створює тимчасову змінну з обмеженим часом життя, але розміщену в глобальному просторі назв. Це дозволяє бачити цю змінну в будь-якій функції, викликаній із цього блоку. Для створення локальних змінних використовуйте оператор my
. Щоб зрозуміти, як це працює розглянемо такий код:
$a = 1;
sub f()
{
local $a;
$a = 2;
g();
}
sub g()
{
print "$a\n";
}
g();
f();
g();
Результат:
1 2 1
Як бачимо, назва глобальної змінної $a
, пр вході у функцію f()
починає вказувати на нову тимчасову змінну, створену у функції, але при виході з f()
глобальне значення відновлюється. Якщо в цьому випадку замість local
використоати my
, було б тричі виведено 1, оскільки в цьому випадку змінна $a
дійсно була б локальною для функції f()
і не видимою з g()
.
З цієї причини багато хто вважає, що оператор local
повинен мати іншу назву, наприклад save
[8].
Локальні змінні в 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
Примітки
- Локальные переменные. Процитовано 26 лютого 2013.
- Пример 22-8. Область видимости локальных переменных. Процитовано 26 лютого 2013.
- Альфред Ахо Моника Лам, Рави Сети, Джеффри Ульман. 1.6.3 Статическая область видимости и блочная структура // Компиляторы: принципы, технологии и инструменты = Compilers: Principles, Techniques, and Tools. — 2-е изд. — Вильямс, 2008. — С. 62. — ISBN 978-5-8459-1349-4.
- Локальные переменные. Процитовано 26 лютого 2013. «По умолчанию локальные переменные хранятся в стеке.»
- 22.2.1. Локальные переменные делают возможной рекурсию. Процитовано 26 лютого 2013.
- Статические переменные. Архів оригіналу за 30 січня 2013. Процитовано 26 лютого 2013.
- local - Perldoc Browser. perldoc.perl.org. Процитовано 31 січня 2022.
- Randal L. Schwartz and Tom Phoenix (1 липня 2001). Learning Perl 3rd edition. O'REILLY. paragraph 4.7. ISBN 0-596-00132-0.