Ruby code is beautiful code, not like that ugly Go nonsense

When did Ruby’s “beautiful, readable code” mantra take such a shitty turn? Or has it always been this bad and I just never noticed back in my “OMFG I LOVE RUBY” days?

It’s apparently poor practice (at least in many circles) to use “@” in front of instance variables.

This is supposedly bad:

class GoodbyeWorld
  def initialize(n)
    @name = n
  end

  def helpme
    # Using the instance var "@name", sir
    puts format("kill me now, %s!", @name)
  end
end

You should expose methods instead of accessing vars directly. So this is better:

class GoodbyeWorld
  attr_reader :name

  def initialize(n)
    @name = n
  end

  def helpme
    # Oh, sorry, I'll stop using @name - using a function call instead, sir
    puts format("kill me now, %s!", self.name())
  end
end

Okay, I can see an argument for that. If we want name to return something less static, we’re now certain all calls will go through whatever logic we have if we decide to define name as some kind of custom method.

But then it’s also poor practice to prefix instance methods with “self”. And … it’s poor practice to call a method with parens unless they’re absolutely necessary. So this is the best way to do it:

class GoodbyeWorld
  attr_reader :name

  def initialize(n)
    @name = n
  end

  def helpme
    # Oh, sorry, too many parens and explicit use of "self".  Fixed, sir.
    puts format "kill me now, %s!", name
  end
end

In a 10-line example, no big deal (though I’d still call it garbage). But when you have a ton of code with modules being mixed, global scope being polluted by various includes, and an app written by multiple people who generally suck at programming (i.e., any given group of software developers), you end up with methods filled with identifiers you can’t easily track down. Are they variables or function calls? Are they part of this class? Something mixed in? Something from a parent class? Some global thing defined somewhere else? No fucking idea.

If you ever wonder why I would rather write 3x as much code in Go, this right here is one of the biggest reasons. I can look at Go code I haven’t seen in months or even a couple years, and tell at a glance all these little details. Scope is very well-defined. The program’s logic may be garbage, and following functions and types around can be a massive pain in the ass, but there is no time spent trying to figure out the origins of every fucking identifier.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.