Search code examples
language-agnosticoopprogramming-languageslanguage-theory

What is the advantage of having this/self pointer mandatory explicit?


What is the advantage of having this/self/me pointer mandatory explicit?

According to OOP theory a method is supposed to operate mainly (only?) on member variables and method's arguments. Following this, it should be easier to refer to member variables than to external (from the object's side of view) variables... Explicit this makes it more verbose thus harder to refer to member variables than to external ones. This seems counter intuitive to me.


Solution

  • In addition to member variables and method parameters you also have local variables. One of the most important things about the object is its internal state. Explicit member variable dereferencing makes it very clear where you are referencing that state and where you are modifying that state.

    For instance, if you have code like:

    someMethod(some, parameters) {
        ... a segment of code
        foo = 42;
        ... another segment of code
    }
    

    when quickly browsing through it, you have to have a mental model of the variables defined in the preceding segment to know if it's just a temporary variable or does it mutate the objects state. Whereas this.foo = 42 makes it obvious that the objects state is mutated. And if explicit dereferencing is exclusively used, you can be sure that the variable is temporary in the opposite case.

    Shorter, well factored methods make it a bit less important, but still, long term understandability trumps a little convenience while writing the code.