Najlepsze pytania
Chronologia
Czat
Perspektywa
This (programowanie obiektowe)
Z Wikipedii, wolnej encyklopedii
Remove ads
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:
Użycie this
Podsumowanie
Perspektywa
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.
Remove ads
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.
Remove ads
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.
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads