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