this

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

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++[ред.ред. код]

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

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

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

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


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

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

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

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

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