Dałem okejkę dla posta @cerrato nie dla tego że się zgadzam ale za rzeczową odpowiedź. Tak naprawdę to podkreśliła ona że debata "this czy nie this" bez uwzględnienia jednego, konkretnego języka trochę nie ma sensu. Ja pisałem w kontekście C#, ale ewidentnie to naprawdę zależy od konkretnego języka (gdzie np. w takim JS bez this
się nie obędzie co już zostało wspomniane wcześniej). Odnosząc się do postu cerrato aby podeprzeć moją tezę:
jak masz clientHeight = screenHeight to co tak naprawdę wiesz? Po pierwsze - można podejrzewać, że clientHeight jest czymś należącym do klasy, ale może np. ktoś trzasnął jakąś zmienną globalną?
W C# nie ma czego takiego jak zmienne globalne.
idąc dalej - ustalamy, że na pewno clientHeight należy do klasy (czyli dałoby się zapisać w postaci this.clientHeight). W takim razie wiemy, że do pola clientHeight podstawiamy screenHeight
Punkt wyżej.
ale ponownie - nie wiemy, czym to coś jest. Czy to jest funkcja, inna składowa naszej klasy, zmienną globalną albo czymś w jakiś inny sposób widocznym w naszym zakresie?
Punkt wyżej oraz dodatkowo to zależy od konwencji języka (Które oczywiście ktoś może łamać). W C# nazwy metod zgodnie z konwencją zaczynają się od dużych liter, zmiennych nie. Rozróżnienie jest więc łatwe Właściwości co prawda również zaczynają się od dużych liter, ale tutaj ułatwieniem jest forma nazewnictwa- właściwości w odróżnieniu od metod (znów- zgodnie z konwencją) nie mają wydźwięku nakazującego, np. Calculate...
, Get...
, Build...
itp.
Nie piszę tego przeciwko używaniu this
bo tak jak już wspomniałem- to całkowicie zależy od konkretnego języka.
Raz jeszcze w kontekście C# to naprawdę tylko kwestia preferencji. Moja preferencja jest taka że nie ma potrzeby z tego korzystać więc tego nie robię, inni (np. @somekind) uważają inaczej. I to w zasadzie tyle.
EDIT: Dodam jeszcze że raz pracowałem w projekcie gdzie dla pól ani nie używano this
, ani nie używano podkreślnika. Z dwojga "złego" zdecydowanie już wolał bym używać this
niż nie używać nic, bo wtedy kod jest zdecydowanie mniej czytelny:
void DoSomething()
{
// ...
finalResult = currentResult + someValueToAdd; // Które z tych to pola, a które to zmienne lokalne?
}