Кіріспе

Компьютерлік бағдарламалауда, бағдарламаның бір бөлігінде ғана қолданылатын айнымалы (көлемі). Компьютерлік ғылымда, жергілікті айнымалы – жергілікті көлемге ие айнымалы. Оны жариялаған функция немесе блок ішіндегі жергілікті айнымалыға сілтеме, үлкен көлемдегі бірдей аттас айнымалыны жояды. Көріну деңгейі екі ғана болған бағдарламалау тілдерінде жергілікті айнымалылар, жаһандық айнымалылардан өзгеше қарастырылады. Ал, ALGOL-дан туындаған көптеген тілдер көрінудің кез келген санына мүмкіндік береді, олардың ішінде жеке айнымалылар, функциялар, тұрақтылар және типтер ұялас блоктар немесе ұялас функциялар арқылы жасырылады. Жергілікті айнымалылар процедуралық бағдарламалаудың және жалпы модульдік бағдарламалаудың негізгі құралы болып табылады: жергілікті көлемдегі айнымалылар жаһандық айнымалылармен туындауы мүмкін жанама әсерлердің алдын алу үшін қолданылады.

Қолданылу аясы

Жергілікті айнымалылар лексикалық немесе динамикалық ауқымға ие болуы мүмкін, бірақ лексикалық (статикалық) ауқым әлдеқайда көп кездеседі. Лексикалық ауқымда (немесе лексикалық ауқымда; сондай-ақ статикалық ауқым немесе статикалық ауқым деп те аталады), егер айнымалы атауының ауқымы белгілі бір блок болса, онда оның ауқымы – блок анықтамасының бағдарламалық мәтіні болып табылады: сол блок мәтіні ішінде айнымалы атауы бар және айнымалы мәнімен байланысты, бірақ сол блок мәтінінен тыс айнымалы атауы жоқ. Керісінше, динамикалық ауқымда (немесе динамикалық ауқымда), егер айнымалы атауының ауқымы белгілі бір блок болса, онда оның ауқымы сол блок және сол блокпен транзитивті шақырылған барлық функциялар (басқа жариялау арқылы қайта жазылмаған жағдайда) құрайды; блок аяқталғаннан кейін айнымалы атауы жоғалады. Perl және Common Lisp сияқты кейбір тілдер бағдарламалаушыға айнымалыны анықтағанда немесе қайта анықтағанда статикалық немесе динамикалық ауқымды таңдау мүмкіндігін береді. Динамикалық ауқымды қолданатын тілдерге Logo, Emacs lisp, bash, dash және MirBSD Korn shell (mksh) тілдерінің "жергілікті" жариялауы жатады. Көптеген басқа тілдер лексикалық ауқымды жергілікті айнымалыларды ұсынады. Көптеген тілдерде жергілікті айнымалылар тікелей шақыру стегінде сақталатын автоматты айнымалылар болып табылады. Бұл рекурсивті функция өзін шақырғанда, функцияның әрбір мысалындағы жергілікті айнымалыларға ерекше мекенжайлар беріледі дегенді білдіреді. Осылайша, осы ауқымдағы айнымалыларды жариялауға, жазуға және оқуға болады, олар мәлімделген блоктан тыс функцияларға жанама әсер ету қаупі жоқ. Құндылық семантикасын қолданатын бағдарламалау тілдері шақырылған кіші программаны оған берілген аргументтердің жеке жергілікті көшірмесімен қамтамасыз етеді. Көптеген тілдерде бұл жергілікті параметрлер кіші программадағы басқа жергілікті айнымалылар сияқты қарастырылады. Керісінше, сілтеме арқылы шақыру және атау арқылы шақыру семантикасы параметрлерге аргумент ретінде берілген мәндердің псевдонимдері ретінде әрекет етуге мүмкіндік береді, бұл кіші программаға өзінің ауқымынан тыс айнымалыларды өзгертуге мүмкіндік береді.

Статикалық жергілікті айнымалылар

Көптеген негізгі тілдерде (C/C++, Visual Basic, VB.NET және PHP сияқты) "статикалық жергілікті" деп аталатын арнайы жергілікті айнымалы түрі бар. Ол функцияның бір шақырылысынан екінші шақырылысына мәнді сақтап беруге мүмкіндік береді – бұл жергілікті ауқымы бар статикалық айнымалы. Осы жағдайда, функцияға рекурсивті шақырулар да (бір ғана, статикалық түрде бөлінген) айнымалыға қол жеткізе алады. Аталған тілдердің барлығында статикалық айнымалылар арнайы сақтау класы кілт сөздерімен (мысалы, static) жарияланады. Статикалық жергілікті айнымалылар, статикалық глобалды айнымалылар сияқты, бағдарламаның өмір бойы жадыда сақталады, бірақ функция ауқымына ие (глобалды емес), автоматты жергілікті айнымалылар сияқты. Бұл, статикалық кілт сөздің әртүрлі тілдердегі басқа қолданылуларынан, оның әртүрлі мағыналары бар екенін еске түсіреді.

Ruby-дегі жергілікті айнымалылар

Руби тілі Perl-ден де шабыттанды, бірақ бұл жағдайда жазу тәсілі жеңілдетілді: жаһандық айнымалының атына $ белгісі қойылуы керек, мысалы, $айнымалы_аты, ал жергілікті айнымалының аты алдынан $ белгісі қойылмайды, мысалы, айнымалы_аты (Perl-де барлық скалярлық мәндердің алдында $ болады). Руби тек Perl-дегі my сияқты статикалық ауқымдағы жергілікті айнымалыларды ғана қолдайтынын ескеріңіз, Perl-дегі local сияқты динамикалық ауқымдағы жергілікті айнымалыларды емес. Рубиде динамикалық ауқымдағы айнымалыларды ұсынатын кем дегенде бір кітапхана бар.