this

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

Хоча принцип один і той самий у всіх мовах. Для простоти ми будемо казати просто this.

Властивості[ред.ред. код]

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

Після того як об'єкт правильно побудований, 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.


Статичні методи в С++ чи Java не пов'язані з екземплярами класу, а з самими класами, і тому не можуть використовувати this, через відсутність об'єкта. В інших мовах, таких як Python, Ruby, чи Smalltalk, статичний метод асоціюється з об'єктом клас, який передаєтьсчя через this. Там такі методи називаються методами класу.


Реалізації[ред.ред. код]

C++[ред.ред. код]

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

Python[ред.ред. код]

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


Self[ред.ред. код]

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


Зноски[ред.ред. код]

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

Посилання[ред.ред. код]