Кіріспе
Бағдарламалау тілдерінде қазіргі уақытта орындалып жатқан кодқа тиесілі объект немесе класс.
"this", "self" және "Me" – кейбір компьютерлік бағдарламалау тілдерінде қолданылатын кілт сөздер, олар қазіргі уақытта орындалып жатқан кодтың бөлігі болып табылатын объект, класс немесе басқа да бірліктерді көрсетеді. Көрсетілген бірлік орындалу контекстіне (мысалы, қай объектінің әдісі шақырылған) байланысты болады. Әртүрлі бағдарламалау тілдері осы кілт сөздерді сәл әртүрлі жолдармен қолданады. "this" сияқты кілт сөз міндетті болып табылатын тілдерде, ағымдағы объектіде сақталған деректерге және әдістерге қол жеткізудің жалғыз жолы осы кілт сөз арқылы жүзеге асырылады. Егер олар қолдануы міндетті болмаса, бұл кілт сөздер бірдей атауға ие айнымалыларды және функцияларды ажыратуға көмектеседі.
Нысанға бағдарланған бағдарламалау
Көптеген объектіге бағытталған бағдарламалау тілдерінде, `this` (немесе `self` немесе `Me` деп те аталады) – инстанция әдістерінде олар жұмыс істеп жатқан объектіге сілтеме жасау үшін қолданылатын айнымалы. SIMULA 67 алғашқы объектіге бағытталған тіл, жергілікті объектіге тікелей сілтеме жасау үшін `this`-ты қолданды. C++ және одан стиль жағынан алынған тілдер (мысалы, Java, C#, D және PHP) де көбінесе `this`-ты қолданады. Smalltalk және басқалары, мысалы, Object Pascal, Perl, Python, Ruby, Rust, Objective C, DataFlex және Swift, `self`-ты пайдаланады. Microsoft-тың Visual Basic-і `Me`-ді қолданады. Бұл ұғым барлық тілдерде ұқсас: `this` әдетте ағымдағы объектіге сілтеме жасайтын өзгермейтін сілтеме немесе көрсеткіш; ағымдағы объект көбінесе `this` кілт сөзін қамтитын қасиетке, әдіске, кіші программаға немесе функцияға «ана» немесе «шақырушы» ретінде әрекет ететін код болып табылады. Объект дұрыс құрылғаннан кейін немесе инстанцияланғаннан кейін `this` әрқашан жарамды сілтеме болып табылады. Кейбір тілдер оны нақты түрде талап етеді; ал басқалары лексикалық ауқымды пайдаланып, оны сыныптарындағы символдарды көруге мүмкіндік беру үшін жасырын түрде қолданады. Немесе, керісінше, `this` арқылы сілтеме жасалған ағымдағы объект, `this` кілт сөзін қамтитын функцияны немесе әдісті шақырған тәуелсіз код объектісі болуы мүмкін. Мұндай жағдай, мысалы, веб-беттегі HTML тегіне қосылған JavaScript оқиғаны өңдегіш, құжат объектісінің сыртындағы жаһандық кеңістікте сақталған `this` кілт сөзін қамтитын функцияны шақырғанда болады; бұл жағдайда `this` құжат объектісінің ішіндегі бет элементіне сілтеме жасайды, бірақ оны қоршап тұрған терезе объектісіне емес. Кейбір тілдерде, мысалы C++, Java және Raku, `this` немесе `self` кілт сөз болып табылады және айнымалы инстанция әдістерінде автоматты түрде болады. Басқаларында, мысалы Python, Rust және Perl 5, инстанция әдісінің бірінші параметрі осындай сілтеме болып табылады. Оны нақты көрсету қажет. Python және Perl-де параметр міндетті түрде `this` немесе `self` деп аталуы керек емес; оны кез келген басқа параметр сияқты бағдарламашы еркін атауға болады. Алайда, бейресми келісім бойынша, Perl немесе Python-дағы инстанция әдісінің бірінші параметрі `self` деп аталады. Rust `self` объектісін шақырылған функция шақырушыны қарызға ала ма, әлде оны иелігіне көшіре ме дегенге байланысты `&self` немесе `self` деп атауға мәжбүрлейді. C++ немесе Java-дағы статикалық әдістер инстанциялармен емес, сыныптармен байланысты, сондықтан олар `this`-ты пайдалана алмайды, себебі объект жоқ. Басқа тілдерде, мысалы Ruby, Smalltalk, Objective C немесе Swift, әдіс осылай берілетін сынып объектісімен байланысты, және олар сынып әдістері деп аталады. Сынып әдістері үшін Python кластық объектіге қол жеткізу үшін `cls` қолданады.
Ұсақ-түйектері мен қиындықтары
Лексикалық ауқым қолданылғанда, кодта "this" сөзін пайдалану заңсыз болмаса да, техникалық қызмет көрсетумен айналысатын бағдарламашыға күдік тудыруы мүмкін. Дегенмен, мұндай жағдайларда "this" сөзін қолданудың заңды жағдайлары да бар, мысалы, бірдей аттас жергілікті айнымалылармен жасырылған инстанция айнымалыларын көрсету немесе әдіс ағымдағы объектіге сілтеме қайтарғысы келгенде, яғни, өзіне сілтеме жасау үшін. Кейбір компиляторларда (мысалы, GCC), C++ инстанция әдістеріне сілтемелерді осы "this" параметрімен бірге басқа типтегі сілтемеге тікелей түрлендіруге болады.
C++ тілінде
C++-ның алғашқы нұсқалары this көрсеткішін өзгертуге мүмкіндік беретін; осы арқылы бағдарламашы әдіс қандай нысанмен жұмыс істеп жатыр, оны өзгерте алатын. Бұл мүмкіндік кейіннен жойылды, ал қазір C++-та this – r мәні. C++-ның алғашқы нұсқаларында сілтемелер болған жоқ және егер олар C++-та бастапқыда болғанда, this көрсеткіш емес, сілтеме болар еді деп ұсынылған. C++ нысандарға көзді кодының delete this операторы арқылы өздерін-өздері жоюға мүмкіндік береді.
С#
C#-дегі `this` кілт сөзі анықтама түрлері үшін Java-дағыдай жұмыс істейді. Дегенмен, C# мән түрлерінде `this` мүлдем басқа семантикаға ие, ол кез келген өзгертілгіш айнымалы сілтемесіне ұқсас және тіпті тапсырманың сол жағында қолданылуы мүмкін. C#-де `this`-тің бір қолданысы – әдіс ішінде сол аттас жергілікті айнымалысы бар сыртқы өріс айнымалысына сілтеме жасауға мүмкіндік беру. Мысалы, мұндай жағдайда `var n = localAndFieldname;` операторы жергілікті айнымалы `localAndFieldname`-нің түрін және мәнін `n`-ге тағайындайды, ал `var n = this.localAndFieldname;` операторы сыртқы өріс айнымалысының түрін және мәнін `n`-ге тағайындайды.
D
D-де сынып, құрылым немесе одақ әдісінде бұл, қоршаушы жиынның (агрегаттың) инстанциясына қатысты өзгермейтін сілтеме болып табылады. Сыныптар – анықтама типтері, ал құрылымдар мен одақтар – мәнді типтері. D-нің алғашқы нұсқасында `this` кілт сөзі, әдіс байланыстырылған нысанның инстанциясына сілтеме ретінде қолданылса, D2-де ол жасырын `ref` функция аргументінің рөлін атқарады.
Жава
Бұл – Java тіліндегі кілттік сөз, ол пайда болатын кластың ағымдағы мысалын көрсетеді. Ол кластың айнымалылары мен әдістеріне қол жеткізу үшін қолданылады. Java-дағы барлық мысал әдістері виртуалды болғандықтан, бұл мән ешқашан босқа тең бола алмайды.
PowerShell көмегімен
PowerShell-де $ арнайы автоматты айнымалысы құбыр желісіндегі ағымдағы нысанды қамтиды. Бұл айнымалыны құбыр желісіндегі әрбір нысанға немесе таңдалған нысандарға әрекет ететін командаларда пайдалануға болады. "бір", "екі", "үш" | % { write $ } PowerShell 5.0 нұсқасынан бастап, сыныптар мен басқа пайдаланушы анықтаған типтерді анықтауға арналған ресми синтаксис қосылды, сонда $ айнымалысы нысанның ағымдағы инстанциясын көрсетеді.
Python-тың атауы
Python-да мұндай кілт сөз жоқ. Объектіге мүшелік функцияны шақырғанда, ол объектінің кластық объектісінде сол аттағы мүшелік функцияны шақырады, сонда объект функцияның бірінші аргументімен автоматты түрде байланыстырылады. Осылайша, инстанция әдістерінің міндетті бірінші параметрі осыған арналған; бұл параметр әдетте "self" деп аталады, бірақ оны кез келген атаумен беруге болады. Класс әдістерінде (classmethod декораторы арқылы жасалған) бірінші аргумент кластың өзіне сілтеме жасайды және әдетте "cls" деп аталады; олар негізінен мұрагерлік конструкторлар үшін қолданылады, онда класты параметр ретінде пайдалану конструкторды тармақтап құруға мүмкіндік береді. Статикалық әдістерде (staticmethod декораторы арқылы жасалған) ерекше бірінші аргумент болмайды.
Өзіндік
"Өзіндік" тілі осы "өзіндік" сөзінің мағынасымен байланысты осылай аталып кетті.
Xbase++
Self сынып әдістерінің ішінде ғана қолданылады. Self-ке сілтеу жасаудың тағы бір тәсілі :: операторын пайдалану.