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

Зміст

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

Обмеження

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

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

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

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

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

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

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

Perl має ключове слово, local , для «локалізації» змінних, але в цьому випадку local означає не те, що більшість людей очікує від нього. [2] Воно створює тимчасову змінну з обмеженим часом життя, але у глобальному просторі імен. Це дозволяє бачити цю змінну будь-якої функції, викликаної з даного блоку. Для створеннялексичних змінних, які більше нагадують автоматичні змінні, використовуйте оператор my . Щоб зрозуміти, як це працює, розглянемо наступний код:

це відбувається з ім'ям глобальної змінної $a, яке починає вказувати на нову тимчасову змінну, створену функції f() , але глобальне значення відновлюється при виході з f() . Використовуючи my у разі замість local вивело б 1 тричі, оскільки у разі змінна $a справді була локальною для функції f() і бачили g() . З цієї причини багато хто вважає, що оператор local повинен мати іншу назву, наприклад save . [5]

Рубі як мова була натхненна також Perl, але в цьому випадку запис був зроблений простіше: імені глобальної змінної повинен передувати знак $, наприклад $variable_name, в той час як локальна змінна просто не має знака $ перед її ім'ям, наприклад, variable_name (в той час як у Perl всі скалярні значення мають $ спереду).