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
.
Зноски
- ISO/IEC 14882:2003(E): Programming Languages - C++. ISO/IEC. 2003.
Посилання
- The Design and Evolution of C++ by Bjarne Stroustrup - Addison-Wesley Pub Co; 1st edition (March 29, 1994); ISBN 0-201-54330-3
- More Effective C++: 35 New Ways to Improve Your Programs and Designs by Scott Meyers -- (1995) ISBN 0-201-63371-X
- Java this