this – słowo kluczowe odnoszące się w niestatycznych metodach klasy do obiektu na rzecz którego dana metoda została wywołana.

W Smalltalku zamiast this używane jest słowo kluczowe self.

Zależnie od użytego języka, this jest interpretowane jako: wskaźnik (C++) referencja (Java, C#) zmienna (PHP)

Użycie this Sytuacje w których użycie this jest niezbędne: Zwrócenie referencji danego obiektu z metody lub przekazanie jako parametr do innej funkcji/metody np. (przykład w C++): class Wektor { public: Wektor& operator = ( const Wektor& wzorzec ) { x = wzorzec.x; y = wzorzec.y; return *this; // zwrócenie referencji

private: double x; double y;

/* ... */ } W celu odróżnienia nazw zmiennych w klasie i nazw parametrów formalnych metody w przypadku gdy są takie same np. (przykład w Javie): class Wektor { private double x; private double y;

public Wektor( double x , double y ) { this.x = x; // rozróżnienie parametrów formalnych konstruktora od zmiennych w klasie this.y = y;

/* ... */

Wywołanie innego konstruktora z ciała konstruktora tej samej klasy (Java). class Person { private String name; private Date dateOfBirth;

public Person( String name ) { this( name , new Date() ); // Wywołanie innego konstruktora w klasie.

public Person( String name , Date dateOfBirth ) { this.name = name; this.dateOfBirth = dateOfBirth;

/* ... */ } Podczas tworzenia obiektu przy użyciu jednoargumentowego (np.: new Person( "Jan Kowalski" )) konstruktora spowoduje wywołanie z jego wnętrza konstruktora dwuargumentowego w którym to pola w klasie są docelowo ustawiane.

this a konwencja nazewnicza Jednym z popularnych sposobów wyróżnienia pola w klasie od zmiennej lokalnej w metodzie jest użycie przedrostka "m_" w nazwie zmiennej np: m_date, m_name. Przedrostek ten pochodzi od angielskiego member czyli członek (w tym wypadku członek klasy). Technika ta wymusza aby każde pole w klasie rozpoczynało się od "m_" co w zależności od środowiska pracy może być uciążliwe np. podczas sortowania po nazwie. Alternatywą dla tego sposobu oznaczania członków klasy jest użycie this - nawet wtedy, gdy nie jest to konieczne. Pozwala to posiadać nazwy zmiennych zgodne z zamierzeniami np.: date czy name a ich użycie w kodzie będzie wyglądało odpowiednio: this.date i this.name.

Samobójstwo obiektu W C++ this jest interpretowany jako wskaźnik. Z tego powodu możliwa jest konstrukcja, w której obiekt popełnia samobójstwo. Realizuje się to poprzez wywołanie delete this; w ciele metody obiektu: class Samobojca { private int dana;

public void zabijSie() { dana = 1; // ok delete this; // dana = 2; // błąd, obiekt juz nie istnieje

Aby mechanizm samobójstwa zadziałał bez błędów obiekt musi być stworzony na stercie, czyli inaczej mówiąc przy użyciu operatora new. Należy również pamiętać, że od momentu wykonania delete this;, obiekt przestaje istnieć i wszelkie odwołania do pól obiektu spowodują naruszenie ochrony pamięci.

Z praktycznego punktu widzenia samobójstwo obiektu jest stosunkowo rzadko spotykane a używanie tego mechanizmu świadczy o błędzie w koncepcji programu.

Kategoria:Programowanie obiektowe