У програмуванні лока́льною змі́нною називають змінну, оголошену всередині блоку коду. Область видимості локальної змінної починається в точці її оголошення і закінчується в кінці цього блоку. Наприклад, у мові С локальними є змінні оголошені всередині функції або блоку (в С блоки обмежуються фігурними дужками { ... }
).
Існують мови програмування, в яких локальну змінну можна оголосити тільки у функції, оскільки в цих мовах локальна змінна, оголошена в блоці, оголошується у функції безпосереднього розташування цього блоку.
Організація в пам'яті
Локальні змінні в більшості мов зберігаються в стеку викликів. Це означає, що якщо функція рекурсивно викликає сама себе, то змінні кожен раз створюються заново і їм виділяється персональна пам'ять, а не записуються в одне і те ж місце.
Обмеження
Локальна змінна обмежується тільки розміром пам'яті виділеної операційною системою або комп'ютером під стек.
Алголоподібні мови дозволяють необмежену вкладеність блоків і в кожному можуть бути свої локальні змінні.
Галузь застосування
Локальні змінні уможливлюють рекурсію.
Змінні локальної області видимості використовують, щоб уникнути проблем з побічними ефектами, які можуть статися з глобальними змінними.
Мови програмування, які використовують виклик за значенням, виділяють кожній підпрограмі локальну область видимості з локальних змінними і локальною копією аргументів, переданих їй.
Локальною змінною є будь-який параметр функції (наприклад, у мові Сі), що не використовує посилань або покажчиків.
Статичні локальні змінні
Статичні змінні — це особливий тип локальних змінних, доступний у багатьох популярних мовах (зокрема в C/C++, Visual Basic, VB.NET). Суть його в тому, що така змінна зберігає своє значення для наступних викликів функції. І в кожному виклику воно буде саме таким, яким було при виході з функції до цього.
local
у Perl
Perl має ключове слово, local
, для «локалізації» змінних, але в цьому випадку, local
означає не те, що більшість людей очікує від нього. Воно створює тимчасову змінну з обмеженим часом життя, але розміщену в глобальному просторі назв. Це дозволяє бачити цю змінну в будь-якій функції, викликаній із цього блоку. Для створення локальних змінних використовуйте оператор 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
.
Локальні змінні в 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
Примітки
- Локальные переменные. оригіналу за 4 серпня 2013. Процитовано 26 лютого 2013.
- Пример 22-8. Область видимости локальных переменных. оригіналу за 16 лютого 2013. Процитовано 26 лютого 2013.
- Альфред Ахо Моника Лам, Рави Сети, Джеффри Ульман. 1.6.3 Статическая область видимости и блочная структура // [ru] = Compilers: Principles, Techniques, and Tools. — 2-е изд. — Вильямс, 2008. — С. 62. — .
- Локальные переменные. оригіналу за 4 серпня 2013. Процитовано 26 лютого 2013.
По умолчанию локальные переменные хранятся в стеке.
- 22.2.1. Локальные переменные делают возможной рекурсию. оригіналу за 16 лютого 2013. Процитовано 26 лютого 2013.
- . Архів оригіналу за 30 січня 2013. Процитовано 26 лютого 2013.
- . perldoc.perl.org. Архів оригіналу за 31 січня 2022. Процитовано 31 січня 2022.
- Randal L. Schwartz and Tom Phoenix (1 липня 2001). Learning Perl 3rd edition. O'REILLY. paragraph 4.7. ISBN .
Див. також
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U programuvanni loka lnoyu zmi nnoyu nazivayut zminnu ogoloshenu vseredini bloku kodu Oblast vidimosti lokalnoyi zminnoyi pochinayetsya v tochci yiyi ogoloshennya i zakinchuyetsya v kinci cogo bloku Napriklad u movi S lokalnimi ye zminni ogolosheni vseredini funkciyi abo bloku v S bloki obmezhuyutsya figurnimi duzhkami Priklad lokalnoyi zminnoyi v seredovishi Microsoft Visual Studio 2012 Isnuyut movi programuvannya v yakih lokalnu zminnu mozhna ogolositi tilki u funkciyi oskilki v cih movah lokalna zminna ogoloshena v bloci ogoloshuyetsya u funkciyi bezposerednogo roztashuvannya cogo bloku Organizaciya v pam yatiLokalni zminni v bilshosti mov zberigayutsya v steku viklikiv Ce oznachaye sho yaksho funkciya rekursivno viklikaye sama sebe to zminni kozhen raz stvoryuyutsya zanovo i yim vidilyayetsya personalna pam yat a ne zapisuyutsya v odne i te zh misce Obmezhennya Lokalna zminna obmezhuyetsya tilki rozmirom pam yati vidilenoyi operacijnoyu sistemoyu abo komp yuterom pid stek Algolopodibni movi dozvolyayut neobmezhenu vkladenist blokiv i v kozhnomu mozhut buti svoyi lokalni zminni Galuz zastosuvannyaLokalni zminni umozhlivlyuyut rekursiyu Zminni lokalnoyi oblasti vidimosti vikoristovuyut shob uniknuti problem z pobichnimi efektami yaki mozhut statisya z globalnimi zminnimi Movi programuvannya yaki vikoristovuyut viklik za znachennyam vidilyayut kozhnij pidprogrami lokalnu oblast vidimosti z lokalnih zminnimi i lokalnoyu kopiyeyu argumentiv peredanih yij Lokalnoyu zminnoyu ye bud yakij parametr funkciyi napriklad u movi Si sho ne vikoristovuye posilan abo pokazhchikiv Statichni lokalni zminniStatichni zminni ce osoblivij tip lokalnih zminnih dostupnij u bagatoh populyarnih movah zokrema v C C Visual Basic VB NET Sut jogo v tomu sho taka zminna zberigaye svoye znachennya dlya nastupnih viklikiv funkciyi I v kozhnomu vikliku vono bude same takim yakim bulo pri vihodi z funkciyi do cogo local u PerlPerl maye klyuchove slovo local dlya lokalizaciyi zminnih ale v comu vipadku local oznachaye ne te sho bilshist lyudej ochikuye vid nogo Vono stvoryuye timchasovu zminnu z obmezhenim chasom zhittya ale rozmishenu v globalnomu prostori nazv Ce dozvolyaye bachiti cyu zminnu v bud yakij funkciyi viklikanij iz cogo bloku Dlya stvorennya lokalnih zminnih vikoristovujte operator my Shob zrozumiti yak ce pracyuye rozglyanemo takij kod a 1 sub f local a a 2 g sub g print a n g f g Rezultat 1 2 1 Yak bachimo nazva globalnoyi zminnoyi a pr vhodi u funkciyu f pochinaye vkazuvati na novu timchasovu zminnu stvorenu u funkciyi ale pri vihodi z f globalne znachennya vidnovlyuyetsya Yaksho v comu vipadku zamist local vikoristoati my bulo b trichi vivedeno 1 oskilki v comu vipadku zminna a dijsno bula b lokalnoyu dlya funkciyi f i ne vidimoyu z g Z ciyeyi prichini bagato hto vvazhaye sho operator local povinen mati inshu nazvu napriklad save Lokalni zminni v RubyMova programuvannya Ruby takozh nathnenna Perl ale v nij poznachennya prostishi nazvi globalnoyi zminnoyi maye pereduvati znak napriklad variable name todi yak lokalna zminna prosto ne maye znaka pered nazvoyu napriklad variable name u Perl usi skalyarni znachennya mayut speredu Priklad vikoristannya lokalnih zminnih movoyu S include lt stdio h gt int a 0 globalna zminna int main printf d a bude vivedeno chislo 0 int a 1 ogolosheno lokalnu zminnu a globalna zminna a ne vidima printf d a bude vivedeno chislo 1 int a 2 she lokalna zminna v bloci globalna zminna a ne vidima ne vidima j poperednya lokalna zminna printf d a bude vivedeno chislo 2 Vidast 012PrimitkiLokalnye peremennye originalu za 4 serpnya 2013 Procitovano 26 lyutogo 2013 Primer 22 8 Oblast vidimosti lokalnyh peremennyh originalu za 16 lyutogo 2013 Procitovano 26 lyutogo 2013 Alfred Aho Monika Lam Ravi Seti Dzheffri Ulman 1 6 3 Staticheskaya oblast vidimosti i blochnaya struktura ru Compilers Principles Techniques and Tools 2 e izd Vilyams 2008 S 62 ISBN 978 5 8459 1349 4 Lokalnye peremennye originalu za 4 serpnya 2013 Procitovano 26 lyutogo 2013 Po umolchaniyu lokalnye peremennye hranyatsya v steke 22 2 1 Lokalnye peremennye delayut vozmozhnoj rekursiyu originalu za 16 lyutogo 2013 Procitovano 26 lyutogo 2013 Arhiv originalu za 30 sichnya 2013 Procitovano 26 lyutogo 2013 perldoc perl org Arhiv originalu za 31 sichnya 2022 Procitovano 31 sichnya 2022 Randal L Schwartz and Tom Phoenix 1 lipnya 2001 Learning Perl 3rd edition O REILLY paragraph 4 7 ISBN 0 596 00132 0 Div takozhGlobalna zminna Oblast vidimosti