Локальна змінна

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Приклад локальної змінної в середовищі Microsoft Visual Studio 2012

У програмуванні лока́льною змі́нною називають змінну, оголошену всередині блоку коду. Область видимості локальної змінної починається в точці її оголошення і закінчується в кінці цього блоку[1][2]. Наприклад, у мові С локальними є змінні оголошені всередині функції або блоку (в С блоки обмежуються фігурними дужками { ... })[3].

Існують мови програмування, в яких локальну змінну можна оголосити тільки у функції, оскільки в цих мовах локальна змінна, оголошена в блоці, оголошується у функції безпосереднього розташування цього блоку.

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

[ред. | ред. код]

Локальні змінні в більшості мов зберігаються в стеку викликів[4]. Це означає, що якщо функція рекурсивно викликає сама себе, то змінні кожен раз створюються заново і їм виділяється персональна пам'ять, а не записуються в одне і те ж місце.

Обмеження

[ред. | ред. код]

Локальна змінна обмежується тільки розміром пам'яті виділеної операційною системою або комп'ютером під стек.

Алголоподібні мови дозволяють необмежену вкладеність блоків і в кожному можуть бути свої локальні змінні.

Галузь застосування

[ред. | ред. код]

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

Змінні локальної області видимості використовують, щоб уникнути проблем з побічними ефектами, які можуть статися з глобальними змінними.

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

Локальною змінною є будь-який параметр функції (наприклад, у мові Сі), що не використовує посилань або покажчиків.

Статичні локальні змінні

[ред. | ред. код]

Статичні змінні — це особливий тип локальних змінних, доступний у багатьох популярних мовах (зокрема в C/C++, Visual Basic, VB.NET). Суть його в тому, що така змінна зберігає своє значення для наступних викликів функції. І в кожному виклику воно буде саме таким, яким було при виході з функції до цього[6].

local у Perl

[ред. | ред. код]

Perl має ключове слово, 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

[ред. | ред. код]

Мова програмування 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. Локальные переменные. Архів оригіналу за 4 серпня 2013. Процитовано 26 лютого 2013.
  2. Пример 22-8. Область видимости локальных переменных. Архів оригіналу за 16 лютого 2013. Процитовано 26 лютого 2013.
  3. Альфред Ахо Моника Лам, Рави Сети, Джеффри Ульман. 1.6.3 Статическая область видимости и блочная структура // Компиляторы: принципы, технологии и инструменты[ru] = Compilers: Principles, Techniques, and Tools. — 2-е изд. — Вильямс, 2008. — С. 62. — ISBN 978-5-8459-1349-4.
  4. Локальные переменные. Архів оригіналу за 4 серпня 2013. Процитовано 26 лютого 2013. По умолчанию локальные переменные хранятся в стеке.
  5. 22.2.1. Локальные переменные делают возможной рекурсию. Архів оригіналу за 16 лютого 2013. Процитовано 26 лютого 2013.
  6. Статические переменные. Архів оригіналу за 30 січня 2013. Процитовано 26 лютого 2013.
  7. local - Perldoc Browser. perldoc.perl.org. Архів оригіналу за 31 січня 2022. Процитовано 31 січня 2022.
  8. Randal L. Schwartz and Tom Phoenix (1 липня 2001). Learning Perl 3rd edition. O'REILLY. paragraph 4.7. ISBN 0-596-00132-0.

Див. також

[ред. | ред. код]