this — ключове слово в деяких об'єктно орієнтованих мовах програмування, яке використовують в методах екземплярів класу для посилання на об'єкт класу. З'явилося в і було унаслідуване іншими Сі-подібними мовами (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++ . С++ дозволяє об'єкту самознищення через інструкцію delete this
. При виконанні вона деконструює об'єкт, і обнуляє вказівник this
.
Python
В Python немає ключового слова this
, але існує обов'язковий перший параметр всіх функцій, який звичайно називають self
.
В Python класи є об'єктами метакласів (вбудованого type
або користувацького, похідною від type
). Посилання на об'єкт метакласу, що відіграє роль посилання self
на об'єкт класу, звичайно називають cls
.
Self
Мова програмування Self названа на честь цього оператора.
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Зноски
- 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);
- More Effective C++: 35 New Ways to Improve Your Programs and Designs by -- (1995)
- Java this [ 11 лютого 2011 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
this klyuchove slovo v deyakih ob yektno oriyentovanih movah programuvannya yake vikoristovuyut v metodah ekzemplyariv klasu dlya posilannya na ob yekt klasu Z yavilosya v C i bulo unasliduvane inshimi Si podibnimi movami Java C PHP Inshi movi vikoristovuyut analogichni ne obov yazkovo klyuchovi slova Smalltalk Object Pascal Ruby Python ta Objective C vikoristovuyut self a Visual Basic Me Vlastivostithis abo analog zazvichaj nezminne posilannya abo vkazivnik yakij yavno abo neyavno peredayetsya u bilshist funkcij klasu ob yekta i vkazuye na potochnij ob yekt Deyaki movi taki yak Objective C dozvolyayut prisvoyuvati this inshi znachennya hocha ce nebazhane deprecated taka diya mozhe silno zaplutati kod oskilki prisvoyennya ne zminyuye potochnij ob yekt a lishe vstanovlyuye inshij ob yekt yak potochnij sho mozhe prizvesti do nespodivanoyi povedinki programi Deyaki movi vigamayut yavnogo zastosuvannya this u funkciyah inshi vikoristovuyut prostori imen i dozvolyayut zvertatis u funkciyah klasu ob yekta do elementiv ob yekta bez this V drugomu vipadku vikoristannya this hocha j ne ye protizakonnim mozhe viklikati poperedzhennya kompilyatora Isnuyut cilkom vipravdani vikoristannya this napriklad pri zvernenni do atributiv ob yekta sho perekriti lokalnimi zminnimi z takimi zh identifikatorami abo koli metod hoche povernuti posilannya na svij ob yekt this staye nibi dodatkovim parametrom dlya metodu ob yekta Napriklad nastupnij metod v C int Foo print bar x maye ekvivalentnu deklaraciyu v procedurnomu programuvanni int foo print Foo const this bar x V deyakih movah napriklad Python ta Perl 5 vimagayetsya yavno vkazuvati parametr this V takomu vipadku jogo navit ne obov yazkovo nazivati this chi self ale za neformalnoyu domovlenistyu pro stil vsi nazivayut jogo self Statichni metodi klasiv ne pov yazani z ekzemplyarami klasu a z samimi klasami i tomu ne otrimuyut i ne mozhut vikoristovuvati this cherez vidsutnist ob yekta Pri comu statichnij metod asociyuyetsya z prostorom imen klasu RealizaciyiC V rannih versiyah C dozvolyalas zmina vkazivnika this i programist mig zminyuvati ob yekt z yakim pracyuye metod Cya vlastivist bula vidkinuta i sogodni this v C S dozvolyaye ob yektu samoznishennya cherez instrukciyu delete this Pri vikonanni vona dekonstruyuye ob yekt i obnulyaye vkazivnik this Python V Python nemaye klyuchovogo slova this ale isnuye obov yazkovij pershij parametr vsih funkcij yakij zvichajno nazivayut self V Python klasi ye ob yektami metaklasiv vbudovanogo type abo koristuvackogo pohidnoyu vid type Posilannya na ob yekt metaklasu sho vidigraye rol posilannya self na ob yekt klasu zvichajno nazivayut cls Self Mova programuvannya Self nazvana na chest cogo operatora Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi ZnoskiISO IEC 14882 2003 E Programming Languages C ISO IEC 2003 PosilannyaThe 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 1995 ISBN 0 201 63371 X Java this 11 lyutogo 2011 u Wayback Machine