A lot of languages encourage talking to yourself. OO PHP code is sprinkled with $this->foo_method();. In some languages it’s necessary. Ruby isn’t one of them.
class Foo
def bar
# Why are you talking to yourself?!
@thingy = self.foo
end
def foo
"QUUX!"
end
end
That self. is doing absolutely nothing. You can drop it entirely:
class Foo
def bar
@thingy = foo
end
def foo
"QUUX!"
end
end
This is a trivial example, but it makes a real difference across a larger codebase. Less noise, easier to read, fewer characters to trip over. Give it a try – your code will look less like it’s having a conversation with itself.
There’s one caveat though: you do need self when calling a setter method. Without it, Ruby thinks you’re assigning to a local variable:
class Foo
attr_accessor :thingy
def bar
# This assigns to a local variable, NOT the attribute.
thingy = foo
end
def foo
"QUUX!"
end
end
class Foo
attr_accessor :thingy
def bar
# This calls Foo#thingy= as intended.
self.thingy = foo
end
def foo
"QUUX!"
end
end
So the rule is simple: skip self for reading, keep it for writing. Your future self (pun intended) will thank you.