unless what

I’m not a huge fan of Ruby’s unless keyword. I mean its nice but it can take some while to get used to. For single line unless statements like this:

puts user.name unless user.name.nil?

It’s nice and easy. Here’s how I’d say that in english “Print the user’s name unless the user doesn’t have a name”. Structuring it the other way is not as intuitive to me:

unless user.name.nil?
  puts user.name

Here’s how I’d say that in english “Unless the user doesn’t have a name, print the user’s name”. That doesn’t sound good at all. In everyday language I always put the unless at the end of the sentence and not the beginning, its just easier for me to understand. Why do we even need unless? Let’s trash it and replace it with something else:

class Object

  def not_nil?
    ! nil?


Then we can have:

puts user.name if user.name.not_nil?

if user.name.not_nil?
  puts user.name

That’s much better, unless never made it into most of the “mainstream” languages most of us grew up on; so coming into OO scripting languages like ruby it may take some time to get this new keyword.

Jared Carroll

Hound automatically reviews Ruby, JavaScript, CoffeeScript, and SCSS code in your GitHub pull requests and comments on style violations. It is free for open source repos and $12/month per private repo.