Кіріспе

NOTOC
Компьютерлік бағдарламалауда автоматты айнымалы – бағдарлама ағыны айнымалының аясына кіргенде және одан шыққанда автоматты түрде бөлінетін және босатылатын жергілікті айнымалы. Аясы – лексикалық контекст, атап айтқанда, айнымалы анықталған функция немесе блок. Жергілікті деректер әдетте (көптеген тілдерде) анықталған функцияның немесе лексикалық контекстің сыртында көрінбейді. Жергілікті деректер шақырылған функция үшін де көрінбейді және қолжетімсіз, бірақ босатылмайды, орындалу тізбегі шақырушыға қайтып келген кезде қайтадан қолданысқа кіреді. Автоматты жергілікті айнымалылар негізінен лексикалық аясы бар рекурсивті тілдерге қатысты қолданылады. Автоматты жергілікті айнымалылар әдетте олар жарияланған процедураның стек фреймінде бөлінеді. Бұл бастапқыда қайта кіру мүмкіндігін және рекурсияны қамтамасыз ету үшін жасалды, және бұл қағида бүгінгі күнге дейін қолданылады. Лексикалық аясы бар тілдердегі рекурсивті (және ұялы) функциялардағы автоматты айнымалылар тұжырымы 1950 жылдардың соңында ALGOL тілі арқылы кең аудиторияға таныстырылды және одан әрі оның көптеген ұрпақтарымен танымал болды. Жергілікті айнымалы термині көбінесе автоматты айнымалымен синоним ретінде қолданылады, себебі олар көптеген бағдарламалау тілдерінде бірдей нәрсе, бірақ жергілікті – жалпы ұғым. Көптеген жергілікті айнымалылар автоматты жергілікті айнымалылар болып табылады, бірақ статикалық жергілікті айнымалылар да бар, әсіресе C тілінде. Статикалық жергілікті айнымалы үшін бөлу статикалық (өмір сүру ұзақтығы – бағдарламаның толық орындалуы), автоматты емес, бірақ ол тек функция орындалу кезінде ғана қолданысқа ие.

C, C++

(Автоматты айнымалылар деп аталады.) Код блогында жарияланған барлық айнымалылар әдепкі бойынша автоматты болып табылады. Бастамаланбаған автоматты айнымалының мәні оған өзінің типіне сәйкес жарамды мән берілгенге дейін белгісіз болады. Осы айнымалылардың жариялануына `auto` сақтау класы спецификаторын қосуға болады, бірақ олардың барлығы әдепкі бойынша автоматты болғандықтан, бұл артық және көбінесе қолданылмайды. C тілінде `register` сақтау класы компиляторға айнымалыны процессор тіркегішінде сақтау туралы ұсыныс береді. Компилятор айнымалының немесе оның кез келген бөлігінің адресін алу операторын (&) қолдануға рұқсат бермеуден басқа, бұл ұсынысты назарға алмауға құқылы. C++ тілінде автоматты айнымалылардың конструкторы орындалу декларация орнына жеткенде шақырылады. Деструктор берілген бағдарлама блогының соңына жеткенде шақырылады (бағдарлама блоктары жиін жақшалармен қоршалған). Бұл мүмкіндік көбінесе ресурстарды бөлу және босатуды басқару үшін қолданылады, мысалы, файлдарды ашып, автоматты түрде жабу немесе жадты босату. Ресурсты алу – бастамалау (RAII) қараңыз. C++11 нұсқасынан бастап, C++ айнымалыларды `auto` типін анықтау спецификаторымен жариялауға мүмкіндік береді, бірақ бұл айнымалының типін анықтайды және айнымалының ауқымына сілтеме жасамайды.

Жава

(Жергілікті айнымалылар деп аталады.) C және C++ тілдеріне ұқсас, бірақ auto немесе register түйін сөздері жоқ. Дегенмен, Java компиляторы тікелей инициализацияланбаған жергілікті айнымалыны пайдалануға жол бермейді және компиляция қатесін шығарады (C және C++ тілдерінде компилятор көбінесе тек ескерту жасайды). Java стандарты әрбір жергілікті айнымалыны пайдалану алдында міндетті түрде инициализациялауды талап етеді. Бұл, бастапқыда әдепкі мәндермен (сандар үшін және объектілер үшін) автоматты түрде инициализацияланатын экземпляр айнымалыларынан өзгеше.

Perl (жазу)

(Лексикалық, меншікті немесе жеке айнымалылар деп аталады.) Perl-де жергілікті айнымалылар `my` операторы арқылы жарияланады. Басталмаған скалярлардың мәні `undef` болады; басталмаған массивтер немесе хэштер болады. Perl-де автоматты айнымалыларды жаратпайтын `local` операторы да бар, ол жаһандық (пакет) айнымалыларға уақытша мән береді, бұл мән қоршаған блок ішінде динамикалық түрде қолданылады. Айнымалының қолданыс аймағынан шыққанда, бұрынғы мәні қалпына келтіріледі.