unless what

Jared Carroll

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
end

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?
  end

end

Then we can have:

puts user.name if user.name.not_nil?

if user.name.not_nil?
  puts user.name
end

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.