Dzisiaj jest 16 stycznia 2025 r.
Chcę dodać własny artykuł

This (programowanie obiektowe)

Wprowadzenie do słowa kluczowego this

Słowo kluczowe this odnosi się do obiektu, w kontekście którego wywoływana jest dana metoda. W języku Smalltalk zamiast this używa się self. W zależności od języka programowania, this może być interpretowane jako:

  • wskaznik (C++)
  • referencja (Java, C#)
  • zmienna (PHP)

Użycie this

Istnieją sytuacje, w których użycie this jest niezbędne:

  • Zwracanie referencji obiektu: 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;
    };
            
  • Rozróżnienie zmiennych: 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
            this.y = y;
        }
    };
            
  • Wywołanie innego konstruktora: Przykład w Javie:
    class Person {
        private String name;
        private Date dateOfBirth;
        public Person(String name) {
            this(name, new Date()); // Wywołanie innego konstruktora
        }
        public Person(String name, Date dateOfBirth) {
            this.name = name;
            this.dateOfBirth = dateOfBirth;
        }
    };
            

Konwencja nazewnicza związana z this

Popularnym sposobem na wyróżnienie pól klasy od zmiennych lokalnych jest użycie przedrostka „m_” (od angielskiego member). Alternatywnie, można używać this, co pozwala na stosowanie bardziej intuicyjnych nazw, takich jak date czy name, z odpowiednim użyciem: this.date i this.name.

Samobójstwo obiektu w C++

W C++ this jest wskaźnikiem, co umożliwia obiektowi „popełnienie samobójstwa” poprzez wywołanie delete this; w ramach metody. Przykład:

class Samobojca {
    private int dana;
    public void zabijSie() {
        dana = 1;    // ok
        delete this; // obiekt przestaje istnieć
    }
};

Warto pamiętać, że mechanizm ten powinien być stosowany ostrożnie, gdyż używanie go może świadczyć o błędach w koncepcji programu.