Кіріспе
NOTOC
Компьютерлік бағдарламалауда автоматты айнымалы – бағдарлама ағыны айнымалының аясына кіргенде және одан шыққанда автоматты түрде бөлінетін және босатылатын жергілікті айнымалы. Аясы – лексикалық контекст, атап айтқанда, айнымалы анықталған функция немесе блок. Жергілікті деректер әдетте (көптеген тілдерде) анықталған функцияның немесе лексикалық контекстің сыртында көрінбейді. Жергілікті деректер шақырылған функция үшін де көрінбейді және қолжетімсіз, бірақ босатылмайды, орындалу тізбегі шақырушыға қайтып келген кезде қайтадан қолданысқа кіреді. Автоматты жергілікті айнымалылар негізінен лексикалық аясы бар рекурсивті тілдерге қатысты қолданылады. Автоматты жергілікті айнымалылар әдетте олар жарияланған процедураның стек фреймінде бөлінеді. Бұл бастапқыда қайта кіру мүмкіндігін және рекурсияны қамтамасыз ету үшін жасалды, және бұл қағида бүгінгі күнге дейін қолданылады. Лексикалық аясы бар тілдердегі рекурсивті (және ұялы) функциялардағы автоматты айнымалылар тұжырымы 1950 жылдардың соңында ALGOL тілі арқылы кең аудиторияға таныстырылды және одан әрі оның көптеген ұрпақтарымен танымал болды. Жергілікті айнымалы термині көбінесе автоматты айнымалымен синоним ретінде қолданылады, себебі олар көптеген бағдарламалау тілдерінде бірдей нәрсе, бірақ жергілікті – жалпы ұғым. Көптеген жергілікті айнымалылар автоматты жергілікті айнымалылар болып табылады, бірақ статикалық жергілікті айнымалылар да бар, әсіресе C тілінде. Статикалық жергілікті айнымалы үшін бөлу статикалық (өмір сүру ұзақтығы – бағдарламаның толық орындалуы), автоматты емес, бірақ ол тек функция орындалу кезінде ғана қолданысқа ие.
In computer programming, an automatic variable is a local variable which is allocated and deallocated automatically when program flow enters and leaves the variable's scope. The scope is the lexical context, particularly the function or block in which a variable is defined. Local data is typically (in most languages) invisible outside the function or lexical context where it is defined. Local data is also invisible and inaccessible to a called function, but is not deallocated, coming back in scope as the execution thread returns to the caller. Automatic local variables primarily applies to recursive lexically scoped languages. Automatic local variables are normally allocated in the stack frame of the procedure in which they are declared. This was originally done to achieve re entrancy and allowing recursion, a consideration that still applies today. The concept of automatic variables in recursive (and nested) functions in a lexically scoped language was introduced to the wider audience with ALGOL in the late 1950s, and further popularized by its many descendants. The term local variable is usually synonymous with automatic variable, since these are the same thing in many programming languages, but local is more general – most local variables are automatic local variables, but static local variables also exist, notably in C. For a static local variable, the allocation is static (the lifetime is the entire program execution), not automatic, but it is only in scope during the execution of the function.
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` операторы да бар, ол жаһандық (пакет) айнымалыларға уақытша мән береді, бұл мән қоршаған блок ішінде динамикалық түрде қолданылады. Айнымалының қолданыс аймағынан шыққанда, бұрынғы мәні қалпына келтіріледі.
Perl also has a local operator that does not create automatic variables, instead giving global (package) variables a temporary value, which is dynamically scoped to the enclosing block. When the scope of the variable is left, the old value is restored.