this — ключове слово в деяких об'єктно орієнтованих мовах програмування, яке використовують в методах екземплярів класу для посилання на об'єкт класу. З'явилося в C++ і було унаслідуване іншими Сі-подібними мовами (Java, C#, PHP). Інші мови використовують аналогічні, не обов'язково ключові слова: Smalltalk, Object Pascal, Ruby, Python та Objective-C використовують self, а Visual Basic — Me.

Властивості

ред.

this (або аналог) — зазвичай незмінне посилання або вказівник, який явно або неявно передається у більшість функцій класу об'єкта і вказує на поточний об'єкт. Деякі мови, такі як Objective-C, дозволяють присвоювати this інші значення, хоча це небажане (deprecated) — така дія може сильно заплутати код, оскільки присвоєння не змінює поточний об'єкт, а лише встановлює інший об'єкт як поточний, що може призвести до несподіваної поведінки програми.

Деякі мови вигамають явного застосування this у функціях, інші використовують простори імен і дозволяють звертатись у функціях класу об'єкта до елементів об'єкта без this. В другому випадку використання this хоча й не є протизаконним, може викликати попередження компілятора. Існують цілком виправдані використання this, наприклад при зверненні до атрибутів об'єкта, що перекриті локальними змінними з такими ж ідентифікаторами, або коли метод хоче повернути посилання на свій об'єкт.

this стає ніби додатковим параметром для методу об'єкта. Наприклад, наступний метод в C++:

int Foo::print (bar x)

має еквівалентну декларацію в процедурному програмуванні:

int foo_print (Foo *const this, bar x)

В деяких мовах, наприклад Python та Perl 5, вимагається явно вказувати параметр this. В такому випадку його навіть не обов'язково називати this чи self; але за неформальною домовленістю про стиль всі називають його self.


Статичні методи класів не пов'язані з екземплярами класу, а з самими класами, і тому не отримують і не можуть використовувати this через відсутність об'єкта. При цьому статичний метод асоціюється з простором імен класу.

Реалізації

ред.

В ранніх версіях C++ дозволялась зміна вказівника this і програміст міг змінювати об'єкт з яким працює метод. Ця властивість була відкинута, і сьогодні this в C++ константа[1]. С++ дозволяє об'єкту самознищення через інструкцію delete this. При виконанні вона деконструює об'єкт, і обнуляє вказівник this.

Python

ред.

В Python немає ключового слова this, але існує обов'язковий перший параметр всіх функцій, який звичайно називають self.

В Python класи є об'єктами метакласів (вбудованого type або користувацького, похідною від type). Посилання на об'єкт метакласу, що відіграє роль посилання self на об'єкт класу, звичайно називають cls.


Мова програмування Self названа на честь цього оператора.


Зноски

ред.
  1. ISO/IEC 14882:2003(E): Programming Languages - C++. ISO/IEC. 2003.

Посилання

ред.